源码解读-object

本篇章解析Object类 

1.private static native void registerNatives();

native关键字:说明这个方法的实现并没有在java中完成,而是在C或者C++中完成的。

static {
    registerNatives();
}

registerNatives,意思是本地注册,这个方法放在静态块中说明类初始化的时候就会执行这个方法。

2.public final native Class<?> getClass();

getClass方法是final方法(不可被继承的),其用途是返回当前类的Class对象,我们可以通过Class对象来获取这个类中的很多信息(类、接口、数组类、基本类型或 void)。

3.public native int hashCode();

返回object的hashCode,所有的Object都有其自己的hashCode,相同Object的hashCode一定相同,不同Object的hashCode可能相同。

4.equals方法

public boolean equals(Object obj) {
    return (this == obj);
}

5.protected native Object clone() throws CloneNotSupportedException;

如果没有实现Cloneable接口,调用Object的clone方法,会导致抛出CloneNotSupportedException异常。

* x.clone() != x</pre></blockquote>
* will be true

其实是克隆了一个实例,但是这两个实例的地址是不同的。(个人理解)

6.public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

toString方法,返回了类名以及hashCode。

7.public final native void notify();

随机地唤醒一个正在等待这个object monitor的线程,并且被唤醒的线程要等待当前获得这个object的lock的线程放弃锁之后才可以执行(proceed),并且notify()这个方法应该是被获取当前object的锁的线程来调用,如果当前线程没有获得这个object 的 monitor,调用notify()方法会抛出IllegalMonitorStateException异常。

8.public final native void notifyAll();

同上,但是会唤醒所有在等待这个object monitor的线程。同样如果当前线程没有获得获得这个object 的 monitor,调用notifyAll()方法会抛出IllegalMonitorStateException异常。

9.public final native void wait(long timeout) throws InterruptedException;

让当前获得这个object monitor的线程放弃他的线程锁,除非1.wait时间结束,2.被notify,3.被notifyAll,4.interrupted

10.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);
}
11.public final void wait() throws InterruptedException {
    wait(0);
}
直接调用wait方法不传入数字的话说明直接让线程进入wait直到被唤醒(0默认一直等待下去)。
12.protected void finalize() throws Throwable { }

finalize应该被垃圾收集器所调用,类被GC认为应该被回收时会调用一次该方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值