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確定不再有該對象的引用時,垃圾收集器將其收集
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章