所有 Object 类方法,以及更多关于 toString() 方法的方法 - 1

“嗨,阿米戈!”

“你好!”

“今天我们要研究的是Object类,
你已经接触过了,你知道Object是所有类的基类,它几乎没有数据,但是它有几个方法。”

“为什么它需要方法?真的有人创建 Object 类的实例吗?”

“这样看:Object 类中的方法在所有类中都是通用的。换句话说,Java 的创建者确定了几种在他们看来每个类都应该拥有的方法,并将它们添加到 Object 类中。”

“当与多态性(在派生类中覆盖 Object 类的方法的能力)结合时,这将成为一个非常强大的工具。”

“让我们看看这些方法是什么:”

方法 描述
public String toString()
返回对象的字符串表示形式。
public native int hashCode()
public boolean equals(Object obj)
一对用于比较对象的方法。
public final native Class getClass()
返回描述当前类的特殊对象。
public final native void notify()
public final native void notifyAll()
public final native void wait(long timeout)
public final void wait(long timeout, intnanos)
public final void wait()
用于控制从不同线程访问对象的方法。用于线程同步。
protected void finalize()
此方法允许您释放本机非 Java 资源:关闭文件、流等。
protected native Object clone()
此方法允许您克隆对象:创建对象的副本。

“这些方法可以分为6组,其中一些你已经熟悉了,剩下的我们会在后续的课程中熟悉。”

“出于某种原因,我在这里看不到任何有用的东西。”

“朋友!如果这些方法不重要,他们就不会将它们添加到每个对象中!所以,我建议你更仔细地了解这些是什么以及为什么需要它们。如果它们对你来说不重要,那么你要么没有理解某事,要么没有正确理解某事。”

“好的,我会仔细听的。”

“让我们从 toString() 方法开始。

“这个方法可以让你得到任何对象的文本描述。它在 Object 类中的实现非常简单:”

return getClass().getName() + "@" + Integer.toHexString(hashCode());

“getClass() 和 hashCode() 也是 Object 类的方法。
调用此方法通常会产生如下结果:”

java.lang.Object@12F456

“这样的描述有​​什么用呢?”

“这个描述让你知道调用该方法的对象的类。你还可以区分对象;不同的对象在@符号后会有不同的数字。”

“但这个方法的真正价值在于其他地方。这个方法可以在任何类中被覆盖,以返回更详细或更合适的对象描述。”

“但还有更多。因为您可以获得每个对象的文本表示,Java 使您可以实现对向对象‘添加’字符串的支持。检查一下
:”

代码 真正发生了什么
int age = 18;
System.out.println("Age is " + age);

String s = String.valueOf(18);
String result = "Age is " + s;
System.out.println(result);
Student st = new Student("Vincent");
System.out.println("Student is " + st);

Student st = new Student("Vincent");
String result = "Student is " + st.toString();
System.out.println(result);
Car car = new Porsche();
System.out.println("My car is " + car);

Car car = new Porsche();
String result = "My car is " + car.toString();
System.out.println(result);

“是的,我经常使用这个。尤其是当我在写程序或寻找错误时。这是一个有用的操作。”