JAvaにおけるObjectクラスソースコード


クラスObjectはクラス階層のルートクラスです.各クラスはObjectをスーパークラス(直接または間接的に継承)として使用します.すべてのオブジェクト(配列を含む)がこのクラスのすべての方法を実現します.objectのソースコードを見てみましょう.
package java.lang;   
public class Object {   
    
   /*       ,    C(C++) DLL    ,    JNI  。*/    
    private static native void registerNatives();   
  /*              */  
    static {   
        registerNatives();   
    }   
   /*     Object      。*/  
    public final native Class<?> getClass();   
  
/*  
hashCode       :  
1.  Java         ,           hashCode    ,            ,         equals              。                         ,         。   
2.     equals(Object)   ,        ,                 hashCode               。   
3.     equals(java.lang.Object)   ,       ,                  hashCode                  。  ,        ,                         。  
*/  
  
    public native int hashCode();   
  
  
    public boolean equals(Object obj) {   
    return (this == obj);   
    }   
  
    /*  CLONE  ,       。*/  
    protected native Object clone() throws CloneNotSupportedException;   
  
    /*           。       */  
    public String toString() {   
    return getClass().getName() + "@" + Integer.toHexString(hashCode());   
    }   
  
   /*                 。*/  
    public final native void notify();   
  
   /*                 。*/  
    public final native void notifyAll();   
  
  
/*            notify()     notifyAll()    ,        。    ,              wait(0)     。   
              。                 ,           notify   ,  notifyAll                     。                           。*/  
    public final void wait() throws InterruptedException {   
    wait(0);   
    }   
  
  
  
   /*            notify()     notifyAll()   ,           ,        。*/  
    public final native void wait(long timeout) throws InterruptedException;   
  
    /*             notify()     notifyAll()   ,              ,             ,        。*/  
    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 >= 500000 || (nanos != 0 && timeout == 0)) {   
        timeout++;   
    }   
  
    wait(timeout);   
    }   
  
    /*                     ,              。*/  
    protected void finalize() throws Throwable { }   
}