在Java中,任何一个类都扩展来自Object类。当没有为某一个类定义父类时,Java会自动定义Object类为其父类。
object类的一些常用方法:
(1)public String toString()
Object类定义了toString()方法,打印输出对象所属的类名和散列码。当需要字符串的地方,系统自动调用该对象的toString()方法。object定义了自己的toString()方法,但是建议自己重写:
//object定义的toString()方法 public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } //范例1: Point p = new Point ( 10, 20 ) ; String message = "The current position is " + p ; //调用p.toString //范例2: classType a = new classType(); System.Out.println(a);//其实是自动调用了a对象的toString()方法
(2)public native int hashCode()
返回对象的Hash码。Hash码是标志对象的唯一值,Hash码相同的对象是同一对象。散列码(hash code)是由对象导出的一个整型值。散列码是没有规律的,如果x和y是两个不同的对象,那x.hashCode()与y.hashCode()一般是不相同的。
(3)三个函数用于控制线程
public final native void notify();
public final native void notifyAll();
public final native void wait();
native型方法指由C++语言编写的方法,Java解释器对其进行转义后才执行。
(4)“==”与equals()
"==" 一般用于基本数据类型比较。若用作两个引用对象比较,仅当引用变量引用同一个对象时,才返回true,否则false。object类的实现与“==”其实就是一个意思,建议重写。
//Object类方法定义: public boolean equals(Object obj) { return (this == obj); } //范例1: Dog d1 = new Dog(1,2); Dog d2 = new Dog(1,2); d1 == d2;//false,虽然两者的值相等,但是d1和d2分别指向的不同对象 d1.equals(d2);//false,object中的equals实现本质就是“==”,所以结果与上面一样 //范例2: //如果我们一定要比较里面的内容是否相等,则我们必须重写equals //假设我们在Dog重写了equals方法,则有如下答案: Dog d1 = new Dog(1,2); Dog d2 = new Dog(1,2); d1 == d2;//false d1.equals(d2);//true,比较的是内容 //范例3: //String类中重写了equals方法 void EqualCompare() { String s1 = new String("Hello"); String s2 = new String("Hello"); //未使用new,s4引用既存的对象(编译器创建对象之前先进行检测"Hello"是否已经存 在,若存在,则返回原对象的引用) String s3 = "Hello"; String s4 = "Hello"; System.out.println(s1.equals(s2)); // true x1行 System.out.println(s1 ==s2); // false 两变量引用不同对象 System.out.println(s3.equals(s4)); //true 两变量引用相同对象 System.out.println(s3 ==s4); // true 两变量引用相同对象 }
(5)finalize()
Object类中的finalize()一个对象被垃圾收集的时候,最后会由JVM调用这个对象的finalize方法。
object类的用方法:
这里面有个父类引用指向子类对象,函数参数为object保证所有类的对象都能过传进来,然后通过instanceof提取出引用的类型与需要的类型相比较。然后通过强制转换为相应的类型,进行下面的操作。
int func(Object o) { if(!(o instanceof Cat))return -1; Cat c = (Cat)o;//强制转换为cat,再进行下面的操作 }