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

getClass()

返回此 Object 的运行时类

hashCode()

本质 上是 返回该对象的哈希码值

equals()

equals(Object obj) 指示某个其他对象是否与此对象“相等”

toString()

返回该对象的字符串表示

clone()

本地CLONE方法,用于对象的复制

notify()

唤醒在此对象监视器上等待的单个线程

notifyAll()

唤醒在此对象监视器上等待的所有线程

wait()

在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量前,导致当前线程等待

finalize()

当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法

  1. getClass 方法

public final native Class<?> getClass();

final 方法、获取对象的运行时 class 对象,class 对象就是描述对象所属类的对象。这个方法通常是和 Java 反射机制搭配使用的。

  1. hashCode 方法

public native int hashCode();

该方法主要用于获取对象的散列值。Object 中该方法默认返回的是对象的堆内存地址

  1. equals 方法

public boolean equals(Object obj) { return (this == obj);}

该方法用于比较两个对象,如果这两个对象引用指向的是同一个对象,那么返回 true,否则返回 false。一般 equals 和 == 是不一样的,但是在 Object 中两者是一样的。子类一般都要重写这个方法。

  1. clone 方法

protected native Object clone() throws CloneNotSupportedException;

该方法是保护方法,实现对象的浅复制,只有实现了 Cloneable 接口才可以调用该方法,否则抛出 CloneNotSupportedException 异常。

默认的 clone 方法是浅拷贝。所谓浅拷贝,指的是对象内属性引用的对象只会拷贝引用地址,而不会将引用的对象重新分配内存。深拷贝则是会连引用的对象也重新创建。
5. toString 方法

public String toString() {
return getClass().getName() + “@” + Integer.toHexString(hashCode());
}

返回一个 String 对象,一般子类都有覆盖。默认返回格式如下:对象的 class 名称 + @ + hashCode 的十六进制字符串。

  1. notify 方法

public final native void notify();

final 方法,主要用于唤醒在该对象上等待的某个线程。

  1. notifyAll 方法

public final native void notifyAll();

final 方法,主要用于唤醒在该对象上等待的所有线程。

  1. wait(long timeout) 方法

public final native void wait(long timeout) throws InterruptedException;

wait 方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait() 方法一直等待,直到获得锁或者被中断。wait(long timeout) 设定一个超时间隔,如果在规定时间内没有获得锁就返回。

  1. finalize 方法

protected void finalize() throws Throwable { }

该方法是保护方法,主要用于在 GC 的时候再次被调用,如果我们实现了这个方法,对象可能在这个方法中再次复活,从而避免被 GC 回收。

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 { }   
    }