[jdk源码]Object

19 篇文章 3 订阅

Ojbect是java中所有类的根类,其他所有的类都是它的子类,包括数组等的这些,都继承了Object类。

方法

Object里共明文写了12个方法

  1. registerNatives()
    registerNatives函数前面有native关键字修饰,Java中,用native关键字修饰的函数表明该方法的实现并不是在Java中去完成,而是由C/C++去完成,并被编译成了.dll,由Java去调用。方法的具体实现体在dll文件中,对于不同平台,其具体实现应该有所不同。用native修饰,即表示操作系统,需要提供此方法,Java本身需要使用。具体到registerNatives()方法本身,其主要作用是将C/C++中的方法映射到Java中的native方法,实现方法命名的解耦。

  2. getClass()
    getClass也是一个native方法,返回的是此Object对象的类对象/运行时对象。效果与Object.class相同

  3. hashCode
    hashCode也是一个native方法,调用这个方法将会返回该对象的哈希码值。

    1. 两个对象equals的话,hashcode必然相等,反之不成立
    2. 一次运行期间,同一个对象的hashcode相等,不同的执行期间,同一个对象的hashcode不必相等。
  4. equals(Object obj)
    equals经常与 == 进行比较,在Object类中,equals的实现正是 ==,equals就是为了对比两个对象是否相等,而这个判断的标准,在Object中,就是 == ,其他的类也可以对这个方法进行重写,去实现自己的标尺。

  5. clone
    clone也是一个native方法,它不是由java实现,clone函数返回的是一个引用,指向的是新的clone出来的对象,此对象与原对象分别占用不同的堆空间。

  6. toString()
    toString方法也是一个我们经常使用的方法。需要注意的是,即使没有显式调用,但当我们使用System.out.println(obj)时,其内部也是通过toString()来实现的。Object类中,该方法会返回 “方法名@哈希值”
    这是个经常被重写的方法。

  7. wait/notify/notifyAll
    一说到wait(…) / notify() | notifyAll()几个方法,首先想到的是线程。确实,这几个方法主要用于java多线程之间的协作。先具体看下这几个方法的主要含义:

    wait():调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notify()/notifyAll()方法。

    wait(long timeout)/wait(long timeout, int nanos):调用此方法所在的当前线程等待,直到在其他线程上调用此方法的主调(某一对象)的notisfy()/notisfyAll()方法,或超过指定的超时时间量。

    notify()/notifyAll():唤醒在此对象监视器上等待的单个线程/所有线程。

    它们都是native方法,不是由java完成。

  8. finalize()
    我们发现Object类中finalize方法被定义成一个空方法,为什么要如此定义呢?finalize方法的调用时机是怎么样的呢?
    首先,Object中定义finalize方法表明Java中每一个对象都将具有finalize这种行为,其具体调用时机在:JVM准备对此对形象所占用的内存空间进行垃圾回收前,将被调用。由此可以看出,此方法并不是由我们主动去调用的(虽然可以主动去调用,此时与其他自定义方法无异)。

总结

Object作为基类,它所拥有的方法使所有其他对象的基本方法。Object类位于java.lang包中,java.lang包包含着Java最基础和核心的类,在编译时会自动导入。Object类没有定义属性,一共有13个方法(构造函数)。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盖丽男

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值