方法一 Object() 即Object的构造方法
Java中规定,每个类都有一个默认的无参构造器,此方法也就是用来体现这一特性
方法二 registerNatives
该方法API中并没有写,但类中是存在的,是一个native方法。
private static native void registerNatives(); static { registerNatives(); }
可以望文生义,注册natives,即注册native方法,也就是说通过该方法我们可以在java中通过一定的命名规则去连接调用
其它语言类型的代码,同理,如果你是在C程序中嵌入Java并且想要这个程序本身内的链接到这个函数,注册本地函数也是
有用的,因为这些通常不会通过标准方法查找机制被发现。
方法三 clone
protected native Object clone() throws CloneNotSupportedException;
它的作用是克隆出一个一模一样的对象,克隆出的对象与原来的对象保存的地址是不一样的,是一个全新的对象。能调用
此方法的类必须实现Cloneable接口,否则会抛出不支持异常,该接口在此处只有一个标识的作用,标识该类可以被克隆,
与Servlizable类似。。
方法4 getClass()
public final native Class<?> getClass();
我们知道所有类都具有父类、属性、构造器、方法等信息,java中又专门定义了另一个类Class,用来描述类的这些信息,
也就是说任何的类都对应一个Class对象用来保存自身的类信息,我们可以通过获取Class对象操作类的这些信息,这与java
中的一大特性反射,息息相关。。
方法5 equals
public boolean equals(Object obj) { return (this == obj); }
明显equals方法在这里与==语义一样,有时候子类需要去重写这个方法时,需要注意相应的要重写hashCode()方法,这样才能
保证equals()返回true,hashCode()也必须返回true的规范。
方法6 hashCode();
public native int hashCode();
在Java应用程序程序执行期间,对于同一对象多次调用hashCode()方法时,其返回的哈希码是相同的,前提是将对象进行equals比较
时所用的标尺信息未做修改。在Java应用程序的一次执行到另外一次执行,同一对象的hashCode()返回的哈希码无须保持一致;
如果两个对象相等(依据:调用equals()方法),那么这两个对象调用hashCode()返回的哈希码也必须相等;
反之,两个对象调用hasCode()返回的哈希码相等,这两个对象不一定相等。方法7 toString();
方法7 toString();
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); }
作用是返回一个对象的字符串表示,toString()是由对象的类型和其哈希码唯一确定,同一类型但不相等的两个对象分别调用toString()
方法返回的结果可能相同。
方法8、9、10、11、12接下来,wait(...) / notify() / notifyAll()方法
public final void wait() throws InterruptedException { wait(0); } 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); } public final native void wait(long timeout) throws InterruptedException;
调用wait方法表示该线程释放锁释放CPU执行资格,等待被唤醒,它的重载方法传入了时间函数,指的是,被wait之后
等待被唤醒或者wait时间超时。
public final native void notify();
唤醒调用该方法的线程
public final native void notifyAll();
唤醒所有等待的线程。
方法13 finalize();
protected void finalize() throws Throwable { }
我们发现Object类中finalize方法被定义成一个空方法,为什么要如此定义呢?finalize方法的调用时机是怎么样的呢?
首先,Object中定义finalize方法表明Java中每一个对象都将具有finalize这种行为,其具体调用时机在:JVM准备对此对形象
所占用的内存空间进行垃圾回收前,将被调用。由此可以看出,此方法并不是由我们主动去调用的(虽然可以主动去调用,此
时与其他自定义方法无异)。