// 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); } }