手记

Object类中的方法

方法一 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准备对此对形象

所占用的内存空间进行垃圾回收前,将被调用。由此可以看出,此方法并不是由我们主动去调用的(虽然可以主动去调用,此

时与其他自定义方法无异)。



0人推荐
随时随地看视频
慕课网APP