源码:
package java.lang; /** * **Class {@code Object} is the root of the class hierarchy. * Every class has {@code Object} as a superclass. All objects, * including arrays, implement the methods of this class** * 文档大概意思该类是所有类的基类,包括数组也实现了该类的方法 */ public class Object { //一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用 private static native void registerNatives(); static { //对象初始化时自动调用此方法 registerNatives(); } /** * Returns the runtime class of this {@code Object}. //返回运行时类 */ public final native Class<?> getClass(); /** * Returns a hash code value for the object. //大概的意思就是返回int hashCode值 */ public native int hashCode(); /** * Indicates whether some other object is "equal to" this one. //比较两个对象内容是否相等 */ public boolean equals(Object obj) { return (this == obj); } /** * Creates and returns a copy of this object. The precise meaning * of "copy" may depend on the class of the object. * 返回一个复制的对象 */ protected native Object clone() throws CloneNotSupportedException; /** * Returns a string representation of the object. * 返回该对象的字符串表示 */ public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } /** * Wakes up a single thread that is waiting on this object's * 唤醒单个线程 */ public final native void notify(); /** * Wakes up all threads that are waiting on this object's monitor. * 唤醒所有线程 */ public final native void notifyAll(); /** * Causes the current thread to wait until either another thread invokes the * {@link java.lang.Object#notify()} method or the * {@link java.lang.Object#notifyAll()} method for this object, or a * specified amount of time has elapsed */ public final native void wait(long timeout) throws InterruptedException; /** * Causes the current thread to wait until another thread invokes the * {@link java.lang.Object#notify()} method or the * {@link java.lang.Object#notifyAll()} method for this object, or * some other thread interrupts the current thread, or a certain * amount of real time has elapsed. * 在其他线程调用此对象的 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); } /** * Causes the current thread to wait until another thread invokes the * {@link java.lang.Object#notify()} method or the * {@link java.lang.Object#notifyAll()} method for this object. * In other words, this method behaves exactly as if it simply * performs the call {@code wait(0)} */ public final void wait() throws InterruptedException { wait(0); } /** * Called by the garbage collector on an object when garbage collection * determines that there are no more references to the object. * A subclass overrides the {@code finalize} method to dispose of * system resources or to perform other cleanup. * 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法 */ protected void finalize() throws Throwable { } }
native关键字标识的java方法为本地方法,底层是有c/c++编写的程序编译后dll文件,java加载dll文件后,可用通过本地方法调用dll中函数。
参考:http://www.cnblogs.com/cq-home/p/6431426.html
https://blog.csdn.net/jerry_1911/article/details/50962083