Object类:是java所有类的祖先,每个类都使用Object作为超类。java只支持单继承,类未声明extends父类,默认为Object。可以使用类型为Object的变量指向任意类型的对象。
比较重要的方法如下:
1.getClass()方法:返回一个对象实例的运行期类型。
1)在构造方法中获取当前实例化的对象类型。
2)获取引用数据类型,所指向的对象实例的类型。
2.hashCode()方法:返回对象实例的hash码,即内存地址的一种表现。
1)对象实例化后hash码固定,不会因对象属性改变而改变。再次执行程序,hash码不要求和之前一致。
2)如equals方法返回true,hash码也应该一致。
3)开发者应尽量做到为不是equals的对象,产生不同的hash码。
4)从实际运用的角度,java将对象实例的内存地址转为整型。
3.equals()方法:判断其他对象是否和当前对象相等。
对于非空引用x的相等运算,满足以下特性:
1)自反性:对于任何非空引用值x,x.equals(x)会返回true
2 ) 对称性:对于任何非空引用值x和y,x.equals(y)会返回true当且仅当y.equals(x)返回true
3)传递性:对于任何非空引用x,y,z,如果x.equals(y)返回true,且用y.equals(z)返回true,
则x.equals(z)也返回true
4)一致性:对于任何非空引用值x和y,在对象引用值没有修改的前提下多次调用会一致返回true和false.
对于任何的非空引用值想,x.equals(null)会返回true
在java.lang.Object的实现代码中,默认比较内存地址
public boolean equals(Object obj){
return(this==obj)
}
例:Animal animal1 = new Dog();
Animal animal2 = new Dog();
System.out.println(animal1==animal2);//false
System.out.print(animal1.equals(animal2));//false;
对于如上代码,使用==和equals方法。结果都是false,这是因为两个对象实例的内存地址不同。
根据需求重写equals方法,可以判断对象实例在逻辑上(非内存地址)是否相等。
4.toString()方法:打印对象信息
所有类都会直接或者间接继承于Object类,都会拥有toString()方法,而Object类中的toString()方法只是返回类的权限定名和内存地址码。可以重写toString()方法,来实现自己所需要的打印信息。重写过后的toString()方法,其实例的内存地址将无法看到。
5.clone()方法:
浅克隆:实现Cloneable()接口,然后直接调用clone()方法
深克隆:如果对象中有引用数据类型,就必须使用深度克隆,就是在克隆时,要把对象中的引用类型对象,也要进行克隆。
6.finalize()方法:定义回收当前对象时需要完成的清理工作。
public static void main(String[] args){
Car car =new Car();
car.service();
car =null;
System.gc();
}