Object类是一个很特别的类,位于java.lang包中,处于Java类层级树的顶端.JAVA中的所有类都是Object类的直接或间接子孙类,它为JAVA中的所有类提供了最基本的属性和方法.
1.Object类的对象克隆方法clone()
克隆是指从已经存在的对象创建一个新对象,新对象的成员变量和原对象有相同的值,和原对象有相同的类型.这可以实现对象的快速创建.
1-1.语法:
原对象如果要具备被克隆的能力,需要实现接口Cloneable,然后从使用接口中声明的clone()方法实现克隆出一个新对象.语法如下:
aCloneableObject.clone();
aCloneableObject是一个实现了Clone()方法的对象.
1-2.实现方式
使一个类具有可克隆能力的一个最简单的方法,是在类的声明中加入implements Cloneable,然后就可以在这个类对象上调用clone()方法.
1-3.克隆对象和原对象不独立分离
如果原对象中有引用外部对象,如ObjExternal.这个外部对象对克隆对象也是可见的.也就是说,原对象和克隆对象引用的都是同一个外部对象ObjExternal.这时候原对象和克隆对象同时操作这个外部对象将会引发不可预知的错误.因此,必须覆盖clone()方法,生成两个外部对象ObjExternal,其中一个是克隆出来的,只面向克隆对象操作.这样做到了克隆对象和原对象资源上的完全分离.
2.Object类的对象的比较方法equals()
equals()方法用来比较两个对象是否是同一个对象.实际使用过程中,往往是比较两个对象其中某项内容是否相同.
示例:
class Book { private String ISBN; Book(String isbn){ this.ISBN = isbn; } public String getISBN(){ return this.ISBN; } public boolean equals(Object obj) { if (obj instanceof Book) return ISBN.equals(((Book)obj).getISBN()); else return false; } } public class ExtendsDemo11{ public static void main(String[] args) { Book firstBook = new Book("0201914670"); Book secondBook = new Book("0201914670"); if (firstBook.equals(secondBook)) { System.out.println("两个对象相等."); } else { System.out.println("两个对象不相等."); } } }
输出结果:
两个对象相等.
可见上述示例中只比较了对象中的ISBN书号.
3.Object类的对象的清除方法finalize()
finalize()方法主要是对成为"垃圾"的对象的清除工作.当一个对象在内存中不存在任何该对象的引用时,JAVA平台会自动回调此方法来清理掉"垃圾"对象.
4.Object类的获取对象类信息的方法getClass()
getClass()方法返回一个Class对象.Class对象中的一些方法可以实现对Class类对象的信息获取,如类名(getSimpleName())、它的超类(getSuperclass())、以及它所实现的接口(getInterfaces()).如:
void printClassName(Object obj) { System.out.println("对象所属的类是" + obj.getClass().getSimpleName()); }
Class类位于java.lang包中,提供了各种方法来获取类的信息.
5.Object类获得对象内存地址的方法hashCode()
hashCode()方法返回的值是对象的哈希值.如果两个对象相等,它们的哈希值必须相等.内存地址都一样的,还不会是同一个对象吗?!如果覆盖了equals()方法,意味着改变了两个对象的被换算方式,此时hashCode()不再有效,必须重写hashCode()方法.
6.Object类的对象字符串表示方法toString()
Object类的toString()方法返回一个对象的字符串表示,这对程序的调试是非常有用的.因此,在编写自己的类时,应该总是考虑去覆盖toString()方法.