JDK源码分析(1)——lang.Object类

概述

  • 所在位置:java.lang.Object
  • 作用:Class Object 是所有类的超类,所有对象(包括数组)都实现了这个类的方法

构造器

public class Object {

    private static native void registerNatives();
    static {
        registerNatives();
    }

native本地方法

  • Java有两种方法:Java方法和本地方法。Java方法是由Java语言编写,编译成字节码,存储在class文件中。本地方法是由其他语言(比如C,C++,或者汇编)编写的,编译成和处理器相关的机器代码。本地方法保存在动态连接库中,格式是各个平台专有的。Java方法是平台无关的,单本地方法却不是。运行中的Java程序调用本地方法时,虚拟机装载包含这个本地方法的动态库,并调用这个方法。本地方法是联系Java程序和底层主机操作系统的连接方法。
  • 由此可知,本地方法的实现是由其他语言编写并保存在动态连接库中,因而在java类中不需要方法实现。registerNatives本质上就是一个本地方法,但这又是一个有别于一般本地方法的本地方法,从方法名我们可以猜测该方法应该是用来注册本地方法的。对,你猜的没错。上述代码的功能就是先定义了registerNatives()方法,然后当该类被加载的时候,调用该方法完成对该类中本地方法的注册。
  • 一个Java程序要想调用一个本地方法,需要执行两个步骤:第一,通过System.loadLibrary()将包含本地方法实现的动态文件加载进内存;第二,当Java程序需要调用本地方法时,虚拟机在加载的动态文件中定位并链接该本地方法,从而得以执行本地方法。registerNatives()方法的作用就是取代第二步,让程序主动将本地方法链接到调用方,当Java程序需要调用本地方法时就可以直接调用,而不需要虚拟机再去定位并链接。
  • 参考博文: https://blog.csdn.net/Saintyyu/article/details/90452826

字段

  • 该类无字段

方法

getClass()

  • 返回类的Class对象
  • 本地方法
public final native Class<?> getClass();

hashCode()

  • 返回对象的hash码值
  • 本地方法
public native int hashCode();

hashCode总合同

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ntsU9Qi8-1589856840254)(1_Object.assets/1589853781801.png)]

equals(Object obj)

  • 判断obj是否等于当前对象
  • 对于任何非空的参考值x和y,当且仅当x和y引用相同的对象(x==y)时,该方法才返回true
public boolean equals(Object obj) {
        // 通过双等号进行判断
        return (this == obj);
    }

toString()

  • 返回对象的字符串表示

  • 子类一般可以重写这个方法

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

notify()

  • 唤醒正在等待对象监视器的单个线程
  • 如果任何线程正在等待这个对象,其中一个被选择唤醒,选择是任意的
  • 线程通过调用wait方法等待对象的监视器
  • 本地方法
  • final方法表示将其锁定,不允许任何继承类对其进行修改
public final native void notify();

notifyAll()

  • 唤醒正在等待对象监视器的所有线程
  • 本地方法
public final native void notifyAll();

wait()

  • 导致当前线程等待,直到另一个线程调用该对象的notify()方法或notifyAll()方法

finalize()

  • 当GC确定不再有该对象的引用时,垃圾收集器将其收集
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章