Object

java是面向对象的语言,在java里面一切都可以看做是一个对象,而java里面所有的对象都默认继承与Object.


1. registerNatives()

registerNatives() 是 native 修饰的,一个本地方法,具体是用C(C++)在DLL中实现的,然后通过JNI调用。

2.getClass ()

getClass 也是一个native方法,这个方法的作用就是返回某个对象的运行时类,它的返回值是Class类型,Class c = obj.getClass();
通过对象c可以通过反射获取该对象的所有
--成员方法,每个成员方法都是一个Method对象;
--成员变量,每个成员变量都是一个Field对象;
--构造函数,构造函数则是一个Constructor。

3.hashCode

hashCode 方法返回散列值。

  • 返回值默认是由对象的地址转换而来的。
  • 同一个对象调用 hashCode 的返回值是相等的。
  • 两个对象的 equals 相等,那 hashCode 一定相等。
  • 两个对象的 equals 不相等,那 hashCode 也不一定相等。

4.equals

默认的equals实现非常简单,它的作用就是比较两个对象是否相等,而比较的依据就是二者的内存地址

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

5.clone

clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类实例的 clone() 方法。

Clone 的注释中还提到比较重要的几点:

  • 克隆的对象必须要实现 Cloneable 接口并重写 clone 方法,否则会报 CloneNotSupportedException 异常

  • clone() 方法并不是 Cloneable 接口的方法,而是 Object 的一个 protected 方法。Cloneable 接口只是规定,如果一个类没有实现 Cloneable 接口又调用了 clone() 方法,就会抛出 CloneNotSupportedException。

  • 深拷贝:拷贝所有的内容,除了基本数据类型变量复制一份,连引用类型变量也复制一份。

  • 浅拷贝:复制基本数据类型变量,对于引用类型的变量,直接返回这个引用本身。

6.toString

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

getClass().getName(); 获取字节码文件的对应全路径名例如java.lang.Object;
Integer.toHexString(hashCode()); 将哈希值转成16进制数格式的字符串。

7.wait 和 notify

wait

wait 的作用是让当前线程进入等待状态,同时,wait() 也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法,当前线程被唤醒进入就绪状态。

wait(long timeout) (以毫秒为单位)让当前线程处于等待(阻塞)状态,直到其他线程调用此对象的notify() 方法或 notifyAll() 方法,或者超过指定的时间量,当前线程被唤醒进入就绪状态。

wait(long timeout, int nanos) 和 wait(long timeout) 功能一样,唯一的区别是这个可以提供更高的精度。总超时时间(以纳秒为单位)计算为 1000000 *timeout+ nanos。By the way ,wait(0,0) 和 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 > 0) {
            timeout++;
        }

        wait(timeout);
    }

notify notifyAll

notify ,notify 的作用就是随机唤醒在等待队列的某个线程,而 notifyAll 就是唤醒在等待队列的所有线程。

二者必须在 synchronized 修饰的同步方法或同步代码中使用。

https://mp.weixin.qq.com/s?__biz=MzA4NjI1MTkyNw==&mid=2449995966&idx=2&sn=2ea60cb25ad083cff22ccc0795bbc6cd&chksm=8838d846bf4f5150f5c8a6312edf47abd2adc723874ba87e648f6cd416f1d8bca98eb2b4eec1&scene=178&cur_album_id=1439937085280059393#rd

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容