重拾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相关的方法。

原文地址:https://www.cnblogs.com/ShanHeDiao/p/5552804.html