Object源码阅读

Object源码阅读

native关键字:通过native标识的方法通过JNI(尤其针对Java与C/C++沟通的工具)编译生成头文件接口,本地语言实现接口进行底层调用,编译生成“实现文件名.dll”文件,在native方法所在类中加入System.loadLibrary(”实现文件名”)语句,加载本地方法实现的dll

本地方法实现:getClass、hashCode、clone、notify、notifyAll、wait

getClass方法:final修饰返回的 Class 对象是由所表示类的 static synchronized 方法锁定的对象。

hashCode方法:equals相等的对象,hashCode一定相同;不相等的对象,不要求一定不同(但建议这么做以提高哈希表的性能),一般通过将内部地址转换为一个整数来实现。

hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。
这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()

equals方法:Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)。 重写equals时建议同时重写hashCode,避免出现equals相等的对象hashCode确不同的情况

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

clone方法:protected修饰,重写需实现Cloneable接口。复制一个份数据生成新对象(而不是赋值指向被克隆对象的引用,防止克隆体改变原对象)。分深度克隆(包括引用类型克隆)和浅克隆(基本数据类型克隆,引用数据类型复制引用)概念,引用对象为不可变对象时使用浅克隆。相关知识点:原型模式

toString方法:返回“类名@此对象哈希码的无符号十六进制表示”,建议所有类重写此方法

notify方法:唤醒线程。从等待状态到锁定状态。

notifyAll方法:唤醒全部线程

wait方法:将线程放等待集中(等待一段时间),同时放弃所有同步要求,处于休眠状态(禁用)。

  1. 唤醒条件:Object.notify()、Object.notifyAll()、Thread.interrupt()、timeout时间片到
  2. 重载:

wait()同wait(0)

 public final void wait() throws InterruptedException {
        wait(0);
 }

wait(long timeout) native修饰,本地方法实现
wait(long timeout, int nanos) 加了一个毫秒微差值 1000000*timeout+nanos,更精确

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);
}

finalize方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值