文章目錄
概述
- 所在位置: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確定不再有該對象的引用時,垃圾收集器將其收集