Object类详解

来源:互联网 发布:国内域名后缀 编辑:程序博客网 时间:2024/05/29 19:02

Object是Java所有类的共同祖先,接口是不继承Object类的。

Object类有1个无参构造方法,11个成员方法和1个静态方法,按照用途作以下区分:
不可重写:

public final native Class<?> getClass();public final native void notify();public final native void notifyAll();public final native void wait(long timeout) throws InterruptedException;

可重写:

//equals重写则一定要重写hashCode//Equals()比较的是两个对象,或者两个对象的内容;//hashCode() 是对象的内部地址,是一个整数public native int hashCode();public boolean equals(Object obj) {    return (this == obj);}//实现java.lang.Cloneable接口(Object类不实现Cloneable)的类的对象来调用clone()//将返回克隆的对象的引用//如果没有实现这个接口,clone()将会抛出一个检查异常//记得返回的引用是Object类,要强转为对应类,或者重写//protected代表只有子类内部才能调用protected native Object clone() throws CloneNotSupportedException;//Object默认返回值: 全限定名@hashCodepublic String toString() {    return getClass().getName() + "@" + Integer.toHexString(hashCode());}public final void wait(long timeout, int nanos) throws InterruptedException {    if (timeout < 0) {        throw new IllegalArgumentException("timeout value is negative");    }    if (nanos < 0 || nanos > 999999) {        throw new IllegalArgumentException("nanosecond timeout value out of range");    }    if (nanos > 0) {        timeout++;    }    wait(timeout);}public final void wait() throws InterruptedException {    wait(0);}//只有当垃圾回收器释放该对象的内存时,才会执行finalize();//如果在 Applet 或应用程序退出之前垃圾回收器没有释放内存,垃圾回收器将不会调用finalize()。protected void finalize() throws Throwable { }

equals()
1、用来比较两个对象是否相等的方法。
2、比较对象分为两种:“引用相等”和“对象相等”。
3、比较引用值是否相等: “==”。
4、比较对象的内容是否相等:xxx.equals()方法。
5、equals在Object类中声明,默认的比较规则是:比较引用。
6、建议覆盖,实现对象的比较(比较对象的状态,就是比较对象的数据)。
覆盖规则:
1、自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
2、对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
3、传递性:对于任何非空引用值 x、y 和 z,如果x.equals(y) 返回 true,并且y.equals(z) 返回true,那么x.equals(z) 应返回 true。
4、一致性:对于任何非空引用值 x 和 y,多次调用x.equals(y) 始终返回 true 戒始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
5、对于任何非空引用值 x,x.equals(null) 都应返回 false。

hashCode()
1、hashCode()方法要和equals方法一同覆盖(Sun公司规定)。
2、当两个对象equals比较为true时,应具有相同的hashCode()值。
3、当两个对象equals比较为false时,应具有不相同的hashCode()值。
4、hashCode() 值要稳定(一致性),一个对象创建以后就不应该再变化。
5、默认的hashCode()值是当前堆对象地址转换的一个整数,这个整数不是内存地址!
6、一般使用对象的OID值作为hashCode的值
OID是对象的唯一编号,在项目中一般采用数据库生成OID,也就是数据库中的“主键”。

原创粉丝点击