简介
Object 作为所有类的父类,如果一个类没有显式继承任何类,则会隐式继承 Object 类.
在该类中定义了在java世界中类的基本行为.
方法解析
-
注册本地方法
private static native void registerNatives(); static { registerNatives(); }
关于本地方法的介绍,会在后续文章介绍.
-
获得class对象
public final native Class<?> getClass();
-
生成hashcode
public native int hashCode();
关于hashcode有如下的规约:
- 在Java应用程序程序执行期间,对于同一对象多次调用hashCode()方法时,其返回的哈希码是相同的,前提是将对象进行equals比较时所用的标尺信息未做修改。在Java应用程序的一次执行到另外一次执行,同一对象的hashCode()返回的哈希码无须保持一致
- 如果两个对象相等(依据:调用equals()方法),那么这两个对象调用hashCode()返回的哈希码也必须相等
- 反之,两个对象调用hashCode()返回的哈希码相等,这两个对象不一定相等
-
equals方法
public boolean equals(Object obj) { return (this == obj); }
关于equals方法,有如下规约:
-
自反性:对于任何非空引用值 x,x.equals(x) 都应返回 true。
-
对称性:对于任何非空引用值 x 和 y,当且仅当 y.equals(x) 返回 true 时,x.equals(y) 才应返回 true。
-
传递性:对于任何非空引用值 x、y 和 z,如果 x.equals(y) 返回 true,并且 y.equals(z) 返回 true,那么 x.equals(z) 应返回 true
-
一致性:对于任何非空引用值 x 和 y,多次调用 x.equals(y) 始终返回 true 或始终返回 false,前提是对象上 equals 比较中所用的信息没有被修改。
-
对于任何非空引用值 x,x.equals(null) 都应返回 false。
-
-
clone方法
protected native Object clone() throws CloneNotSupportedException;
如果要调用 clone() 方法,该对象必须实现 Clonealbe 接口,不然会报 CloneNotSupportedException 异常.
通过该方法会实现浅克隆 -
toString方法
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
该方法默认实现会打印出类名和hashcode值.
-
notify方法
public final native void notify();
该方法会随机唤醒一个因为调用了当前对象的 wait 方法而陷入阻塞的线程.
-
notifyAll方法
public final native void notifyAll();
唤醒全部因为调用了当前对象的 wait 方法而陷入阻塞的线程。
-
wait方法
public final native void wait(long timeout) throws InterruptedException; 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); }
这个方法有三个重载的版本(其实终归调用的都是同一个方法),主要作用是使得当前线程让出所持有的对象锁并陷入阻塞状态,另外两个带有参数的版本可以控制线程的阻塞时间,阻塞时间达到了参数所指定的时间时就唤醒该线程。当然也可以在线程阻塞过程中通过这个对象的 notify / notifyAll 方法唤醒.
关于wait/notify/notifyAll方法执行有如下要求:
该方法只有获得该object监视器的线程才能调用,而一个线程获得object的监视器有如下3种方式:- 执行synchronized实例方法
- 执行synchronized 代码块
- 执行synchronized 静态方法
-
finalize方法
protected void finalize() throws Throwable { }
该方法会在对象回收前调用,用于回收资源,由于该方法的一些弊端,如至多调用一次,调用时间不确定.因此,关于这个方法已不推荐使用.