
“嗨,阿米戈!”
“你好!”
“今天我们要研究的是Object类,
你已经接触过了,你知道Object是所有类的基类,它几乎没有数据,但是它有几个方法。”
“为什么它需要方法?真的有人创建 Object 类的实例吗?”
“这样看:Object 类中的方法在所有类中都是通用的。换句话说,Java 的创建者确定了几种在他们看来每个类都应该拥有的方法,并将它们添加到 Object 类中。”
“当与多态性(在派生类中覆盖 Object 类的方法的能力)结合时,这将成为一个非常强大的工具。”
“让我们看看这些方法是什么:”
方法 | 描述 |
---|---|
|
返回对象的字符串表示形式。 |
|
一对用于比较对象的方法。 |
|
返回描述当前类的特殊对象。 |
|
用于控制从不同线程访问对象的方法。用于线程同步。 |
|
此方法允许您释放本机非 Java 资源:关闭文件、流等。 |
|
此方法允许您克隆对象:创建对象的副本。 |
“这些方法可以分为6组,其中一些你已经熟悉了,剩下的我们会在后续的课程中熟悉。”
“出于某种原因,我在这里看不到任何有用的东西。”
“朋友!如果这些方法不重要,他们就不会将它们添加到每个对象中!所以,我建议你更仔细地了解这些是什么以及为什么需要它们。如果它们对你来说不重要,那么你要么没有理解某事,要么没有正确理解某事。”
“好的,我会仔细听的。”
“让我们从 toString() 方法开始。
“这个方法可以让你得到任何对象的文本描述。它在 Object 类中的实现非常简单:”
return getClass().getName() + "@" + Integer.toHexString(hashCode());
“getClass() 和 hashCode() 也是 Object 类的方法。
调用此方法通常会产生如下结果:”
java.lang.Object@12F456
“这样的描述有什么用呢?”
“这个描述让你知道调用该方法的对象的类。你还可以区分对象;不同的对象在@符号后会有不同的数字。”
“但这个方法的真正价值在于其他地方。这个方法可以在任何类中被覆盖,以返回更详细或更合适的对象描述。”
“但还有更多。因为您可以获得每个对象的文本表示,Java 使您可以实现对向对象‘添加’字符串的支持。检查一下
:”
代码 | 真正发生了什么 |
---|---|
|
|
|
|
|
|
“是的,我经常使用这个。尤其是当我在写程序或寻找错误时。这是一个有用的操作。”
GO TO FULL VERSION