java object默认的基本方法

java object默认的基本方法中没有copy(),含有如下方法:
getClass(), hashCode(), equals(), clone(), toString(), notify(), notifyAll(),  wait(), finalize()

 

拿出来源码对比一下方法:

  1. package  java.lang;   
  2. public   class  Object {   
  3.     
  4.     /* 一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用。*/     
  5.      private   static   native   void  registerNatives();   
  6.    /* 对象初始化时自动调用此方法*/   
  7.      static  {   
  8.         registerNatives();   
  9.     }   
  10.     /* 返回此 Object 的运行时类。*/   
  11.      public   final   native  Class<?> getClass();   
  12.   
  13. /*   
  14. hashCode 的常规协定是:(本质 上是 返回该对象的哈希码值。 )
  1.    
  2. 1.在 Java 应用程序执行期间,在对同一对象多次调用 hashCode 方法时,必须一致地返回相同的整数,前提是将对象进行 equals 比较时所用的信息没有被修改。从某一应用程序的一次执行到同一应用程序的另一次执行,该整数无需保持一致。    
  3. 2.如果根据 equals(Object) 方法,两个对象是相等的,那么对这两个对象中的每个对象调用 hashCode 方法都必须生成相同的整数结果。    
  4. 3.如果根据 equals(java.lang.Object) 方法,两个对象不相等,那么对这两个对象中的任一对象上调用 hashCode 方法不 要求一定生成不同的整数结果。但是,程序员应该意识到,为不相等的对象生成不同整数结果可以提高哈希表的性能。   
  5. */   
  6.   
  7.      public   native   int  hashCode();   
  8.   
  9.   
  10.      public   boolean  equals(Object obj) {   
  11.      return  ( this  == obj);   
  12.     }   
  13.   
  14.      /*本地CLONE方法,用于对象的复制。*/   
  15.      protected   native  Object clone()  throws  CloneNotSupportedException;   
  16.   
  17.      /*返回该对象的字符串表示。非常重要的方法*/   
  18.      public  String toString() {   
  19.      return  getClass().getName() +  "@"  + Integer.toHexString(hashCode());   
  20.     }   
  21.   
  22.     /*唤醒在此对象监视器上等待的单个线程。*/   
  23.      public   final   native   void  notify();   
  24.   
  25.     /*唤醒在此对象监视器上等待的所有线程。*/   
  26.      public   final   native   void  notifyAll();   
  27.   
  28.   
  29. /*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法前,导致当前线程等待。换句话说,此方法的行为就好像它仅执行 wait(0) 调用一样。    
  30. 当前线程必须拥有此对象监视器。该线程发布对此监视器的所有权并等待,直到其他线程通过调用 notify 方法,或 notifyAll 方法通知在此对象的监视器上等待的线程醒来。然后该线程将等到重新获得对监视器的所有权后才能继续执行。*/   
  31.      public   final   void  wait()  throws  InterruptedException {   
  32.     wait( 0 );   
  33.     }   
  34.   
  35.   
  36.   
  37.     /*在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。*/   
  38.      public   final   native   void  wait( long  timeout)  throws  InterruptedException;   
  39.   
  40.      /* 在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待。*/   
  41.      public   final   void  wait( long  timeout,  int  nanos)  throws  InterruptedException {   
  42.          if  (timeout <  0 ) {   
  43.              throw   new  IllegalArgumentException( "timeout value is negative" );   
  44.         }   
  45.   
  46.          if  (nanos <  0  || nanos >  999999 ) {   
  47.              throw   new  IllegalArgumentException(   
  48.                  "nanosecond timeout value out of range" );   
  49.         }   
  50.   
  51.      if  (nanos >=  500000  || (nanos !=  0  && timeout ==  0 )) {   
  52.         timeout++;   
  53.     }   
  54.   
  55.     wait(timeout);   
  56.     }   
  57.   
  58.      /*当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。*/   
  59.      protected   void  finalize()  throws  Throwable { }   
  60. }
posted @ 2019-06-13 17:15  那些年的代码  阅读(1688)  评论(0编辑  收藏  举报