草蛋的小青年

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
 
// Object 是所有对象的父类
引用:https://www.cnblogs.com/lwbqqyumidi/p/3693015.html
public class Object {
	
	//虽然用private修饰 但是下面的静态方法先执行
	private static native void registerNatives();
	
    static {
        registerNatives();
    }
	
	/*
	The actual result type is {@code Class<? extends |X|>}
	Number n = 0;                            
    Class<? extends Number> c = n.getClass();
	<? extends Number>见泛型的边界
	返回运行时类 用于反射
	*/
	public final native Class<?> getClass();
	
	/*
	clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。
	protected 限制修饰符 在同一个包内或者不同包的子类可以访问
	要想调用clone()方法需要该类实现Cloneable接口
	*/
	protected native Object clone() throws CloneNotSupportedException;
	
	
	/*   
	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);
    }
	
	//提供了所有对象可转换为String的方法
	public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
	
	/*唤醒在此对象监视器上等待的单个线程。*/ 
	public final native void notify();
	
	 /*唤醒在此对象监视器上等待的所有线程。*/   
	public final native void notifyAll();
	
	/*当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法。*/   
	protected void finalize() throws Throwable { }
	
	 /*在其他线程调用此对象的 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 > 0) {
            timeout++;
        }

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

  

posted on 2018-01-04 17:27  草蛋的小青年  阅读(124)  评论(0编辑  收藏  举报