重拾Object--(一)初识
Java中的Object类有着特殊的意义,他是所有其它类的父类,查看Object类的源代码,可以发现代码不多,逻辑也很简单。
Java所有类的源代码我们都可以在JDK的文件中查看,在JDK下会有一个名为src.zip的压缩包,里面就是所有类的源代码,当然这里所有的文件都是.java格式的。为了方便查看,我们可以找到JDK中jre/lib下的rt.jar文件,这里面也有源代码,只不过是以.class文件形式存在,我们可以使用反编译软件jd-gui(http://jd.benow.ca可下载)查看,会比直接查看.java文件方便不少。当然看源代码之前先看看API,也能事半功倍。
以下是jdk1.7.0_40下Object类的源代码
1 public class Object 2 { 3 private static native void registerNatives(); 4 5 public final native Class<?> getClass(); 6 7 public native int hashCode(); 8 9 public boolean equals(Object paramObject) 10 { 11 return this == paramObject; 12 } 13 14 protected native Object clone() 15 throws CloneNotSupportedException; 16 17 public String toString() 18 { 19 return getClass().getName() + "@" + Integer.toHexString(hashCode()); 20 } 21 22 public final native void notify(); 23 24 public final native void notifyAll(); 25 26 public final native void wait(long paramLong) 27 throws InterruptedException; 28 29 public final void wait(long paramLong, int paramInt) 30 throws InterruptedException 31 { 32 if (paramLong < 0L) { 33 throw new IllegalArgumentException("timeout value is negative"); 34 } 35 36 if ((paramInt < 0) || (paramInt > 999999)) { 37 throw new IllegalArgumentException("nanosecond timeout value out of range"); 38 } 39 40 if ((paramInt >= 500000) || ((paramInt != 0) && (paramLong == 0L))) { 41 paramLong += 1L; 42 } 43 44 wait(paramLong); 45 } 46 47 public final void wait() 48 throws InterruptedException 49 { 50 wait(0L); 51 } 52 53 protected void finalize() 54 throws Throwable 55 { 56 } 57 58 static 59 { 60 registerNatives(); 61 } 62 }
在Object类中,我们经常会打交道方法主要是toString()、equals(Object paramObject)和hashCode()三个方法。
其他的方法中,notify()、notifyAll()和wait(long paramLong)都是本地方法,和线程相关。还有两个重载的方法wait()和wait(long paramLong, int paramInt)也都和线程相关。
finalize()是GC相关的方法。