JDK源码解析---Object

1.概述

Object类是所有类的父类(包括数组),Object类中共有12个方法(除了init和cinit以外),如下图所示
在这里插入图片描述

  • 本地方法registerNatives 在类被加载时执行。
  • hashCode(),equals(Object obj),clone(),toString(),finalize()。这五个方法由子类重写。
  • getClass(),notify(),notifyAll(),wait(long timeout),wait(long timeout, int nanos),wait()这6个final的方法,都是由本地方法实现。

2.registerNatives()

registerNatives方法,作用是通过类加载器,加载一些本地方法到jvm中。
Object类在被加载时,会加载下面的methods中的那些本地方法到jvm中。

static JNINativeMethod methods[] = {
{“hashCode”,()I”, (void *)&JVM_IHashCode},
{“wait”,(J)V”, (void *)&JVM_MonitorWait},
{“notify”,()V”, (void *)&JVM_MonitorNotify},
{“notifyAll”,()V”, (void *)&JVM_MonitorNotifyAll},
{“clone”,()Ljava/lang/Object;, (void *)&JVM_Clone},
};

3.getClass()

这个方法返回的是类的Class对象,具体值取决于调用这个方法的对象

4.notify()、notifyAll()

当某个线程调用某个对象的wait()方法,则会释放该对象的锁,然后进入到对象的等待队列中
Objet可以当作锁来使用,其子类也是。这两个方法用来唤醒等待队列中的线程
区别在于一个唤醒单个线程,一个唤醒所有线程

5.wait(long timeout)、wait(long timeout, int nanos)、wait()

三个方法都是将获得锁的线程释放锁 进入等待队列。

区别在于有参数的方法在等待一定的时间后会被主动唤醒
而wait(long timeout)、wait(long timeout, int nanos)的区别在于
timeout 是毫秒级别的时间
nanos 是以毫微秒为单位更加的精准

6.hashCode()

用于计算一个对象的hash值

hash值需要遵守的约定:
  • 一致性(consistent),在程序的一次执行过程中,对同一个对象必须一致地返回同一个整数。
  • 如果两个对象通过equals(Object)比较,结果相等,那么对这两个对象分别调用hashCode方法应该产生相同的整数结果。
  • 如果两个对象通过java.lang.Object.equals(java.lang.Ojbect)比较,结果不相等,不必保证对这两个对象分别调用hashCode也返回两个不相同的整数。

7.equals(Object obj)

判断2个对象是否相等,默认实现是判断引用是否相等。
一般来说,如果重写了equals方法,那么需要重写hashcode方法

8.clone()

拷贝默认实现是浅拷贝,若对于一个复杂的对象,需要对内部引用的对象也进行一次拷贝。
若想调用clone()方法,则需要实现Cloneable接口。

注意!所有的数组默认实现了 Cloneable接口。

9.toString()

推荐所有的子类都覆盖这个方法,默认实现返回类名和对象哈希值的十六进制。

10.finalize()

当这个对象不再被引用时由gc调用,子类覆盖这个方法用于释放系统资源。
在第一次垃圾回收发现不可达时,会先把finalize方法加到F-Q队列中由专门的线程执行,可以在这个方法中自救。如果没有自救或者自救失败,这个类就会被标记为可回收的,再下次垃圾回收时如果还是不可达,并且finalize执行过之后,就会真正的回收。
如果finalize方法发生异常,那么方法会终止,但是异常会被忽略。
finalize是一个对象用来自救的手段,并不一定要去实现它。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jdk-11-windows是指Java开发工具包(Java Development Kit)的第11个版本,适用于Windows操作系统。JDK是使用Java语言进行开发的应用程序和软件的环境,它提供了许多工具和功能,可用于编写、编译和运行Java程序。 JDK-11包含了许多新的特性和改进,使得Java编程更加方便和高效。其中一项突出的特性是JVM(Java虚拟机)的性能改进,它可以提供更快速和更高效的执行速度。其他一些特性包括G1垃圾回收器的增强和适用于观察、诊断和监控Java程序的Java Flight Recorder和Java Mission Control工具等。 对于Windows用户来说,JDK-11提供了易于安装和使用的Windows平台上的开发环境。它包括了JRE(Java运行环境)和用于开发、调试和测试Java应用程序的工具集。通过JDK-11,开发人员可以利用Windows操作系统的优势和特性,进行快速、高效和可靠的Java开发。 此外,JDK-11还提供了许多与安全性和稳定性相关的改进。它包含了新的安全性特性,可以帮助开发人员保护他们的应用程序免受潜在的安全威胁。另外,JDK-11还包含了一些稳定性改进,可以提高应用程序的性能和可靠性。 总之,JDK-11-windows是适用于Windows操作系统的Java开发工具包的最新版本。它提供了许多新的特性和改进,使得Java开发更加方便、高效和安全。对于Windows用户来说,使用JDK-11可以提供更好的开发体验,使他们能够更轻松地创建出优秀的Java应用程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值