• 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. }
  • 相关阅读:
    day15—jQuery UI之widgets插件
    day14—jQuery UI 之dialog部件
    day13—CSS之导航栏
    day12—jQuery ui引入及初体验
    day11—前端学习之我不想看书
    struts2的action方法匹配以及通配符的使用
    Java中的static
    ActiveMQ的简单使用
    MS DOS 常用命令整理
    IntelliJ IDEA 中 Ctrl+Alt+Left/Right 失效
  • 原文地址:https://www.cnblogs.com/zhuyeshen/p/11017849.html
Copyright © 2020-2023  润新知