public classObject {
//native 方法用于注册一个系统
//native是一个计算机函数,一个Native Method就是一个Java调用非Java代码的接口。方法的实现由非Java语言实现,比如C或C++。private static native voidregisterNatives();
//静态方法块 在这个类加载的时候去调用这个静态的registerNatives()方法,用于注册这个调用系统底层的接口static{
registerNatives();
}
//getClass 这个方法对于熟悉JAVA的反射再熟悉不过了
//反射就是在java运行过程中,通过类名.getClass() 可以获取到这个类运行过程中的字节码文件(Class文件)
public final native Class>getClass();
//hasCode返回一个对象在内存里面所表示的hash值
//如果两个对象的hash值相同,则表示这两个对象是相等的,或者说是同一个对象
public native inthashCode();
//比较两个对象是否相等,这里使用的是 ==号比较符号,判断两个对象是否有相同的内存地址。
//这里复习一下,==比较基本类型 比如int char floot 都比较的是他们的值
//对象使用 == 比较的时候比较的是他们的内存地址。
public booleanequals(Object obj) {return (this ==obj);
}
//对象的克隆方法,需要被克隆的对象需要实现Cloneable 接口 调用父类的clone()方法实现对象的克隆
protected native Object clone() throwsCloneNotSupportedException;
//toString 方法,用于直观的表现出当前对象,一般表现形式是 对象名称+@+十六进制哈希值
publicString toString() {return getClass().getName() + "@" +Integer.toHexString(hashCode());
}
//唤醒正在等待这个对象的某一个线程,这个唤醒是任意的
public final native voidnotify();
//唤醒所有等待当中的线程
public final native voidnotifyAll();
//让一个线程进入等待状态,传入一个毫秒数后运行,或者由另一个线程调用notify()方法让这个线程再次运行
public final native void wait(long timeout) throwsInterruptedException;
//传入第二个参数,纳秒,是为了更好的控制让线程从等待到运行
public final void wait(long timeout, int nanos) throwsInterruptedException {if (timeout < 0) {throw new IllegalArgumentException("timeout value is negative");
}if (nanos < 0 || nanos > 999999) {throw newIllegalArgumentException("nanosecond timeout value out of range");
}if (nanos > 0) {
timeout++;
}
wait(timeout);
}
//这个方法其实就是调用wait方法,只不过传入一个0ms的参数
public final void wait() throwsInterruptedException {
wait(0);
}
//这个方法和垃圾回收机制有关,通知垃圾回收器开始运行,但是运行的具体时间不确定,垃圾回收器会清理掉当前内存中没有引用的对象
protected void finalize() throws Throwable { }