在Java中,全部的類都默認繼承同一個類,那就是Object類;Object類是惟一沒有父類的類;位於java.lang 包下;html
默認有系統生成無參構造器 public Object(){};
java
Object類沒有聲明任何成員變量和類變量程序員
建立並返回此對象的一個副本。 採用本地系統語言編寫編程
這個方法比較特殊,子類必須實現Cloneable 接口 ,不然會拋出異常 java.lang.CloneNotSupportedException;api
只能子類進行調用clone,Object類實例沒法調用,由於Object沒有實現Cloneable 接口 ;該方法只是進行淺拷貝,編程語言
被複制對象的全部變量都含有與原來的對象相同的值,而全部的對其餘對象的引用仍然指向原來的對象ide
public class ObjectTest implements Cloneable { public static void main(String[] args) throws Exception { ObjectTest objTest = new ObjectTest(); Object obj = objTest.clone(); System.out.println(objTest == obj); } }
false
兩個引用是否指向同一個對象。若是子類不重寫該方法,默認比較對象引用是否相同;性能
equals
方法在非空對象引用上實現相等關係:spa
自反性:對於任何非空引用值 x
,x.equals(x)
都應返回 true
。.net
對稱性:對於任何非空引用值 x
和 y
,當且僅當 y.equals(x)
返回 true
時,x.equals(y)
才應返回 true
。
傳遞性:對於任何非空引用值 x
、y
和 z
,若是 x.equals(y)
返回 true
,而且 y.equals(z)
返回 true
,那麼 x.equals(z)
應返回 true
。
一致性:對於任何非空引用值 x
和 y
,屢次調用 x.equals(y) 始終返回 true
或始終返回 false
,前提是對象上 equals
比較中所用的信息沒有被修改。
對於任何非空引用值 x
,x.equals(null)
都應返回 false
。
Object
類的 equals 方法實現對象上差異可能性最大的相等關係;即,對於任何非空引用值 x
和 y
,當且僅當 x
和 y
引用同一個對象時,此方法才返回 true
(x == y
具備值 true
)。
注意:當此方法被重寫時,一般有必要重寫 hashCode 方法,以維護 hashCode 方法的常規協定,該協定聲明相等對象必須具備相等的哈希碼。
protected void finalize()
當垃圾回收器肯定不存在對該對象的更多引用時,由對象的垃圾回收器調用此方法。
public class ObjectTest implements Cloneable { @Override protected void finalize() throws Throwable { System.out.println("回收了"); super.finalize(); } public static void main(String[] args) throws Exception { ObjectTest objTest = new ObjectTest(); for (int i = 0; i < 100; i++) { objTest = new ObjectTest(); } ObjectTest obj = (ObjectTest)objTest.clone(); System.out.println(obj); } }
在代碼中打個Debug斷點,而後Debug 運行;
在JDK安裝目錄打開jvisualvm.exe
選擇正在運行的類,在右半部分找到 監視 頁,找到 執行垃圾回收按紐 進行點擊 查看控制檯
public final native Class<?> getClass()
返回此 Object 的運行時類。表示Object其實是哪一個類
public class ObjectTest { public static void main(String[] args) throws Exception { Object objTest = new ObjectTest(); System.out.println(objTest.getClass().getName()); } }
cn.trip.core.servlet.ObjectTest
返回該對象的哈希碼值。本地方法;
當你覆寫(override)了equals()方法以後,必須也覆寫hashCode()方法,反之亦然。這個方法返回一個整型值(hash code value),若是兩個對象被equals()方法判斷爲相等,那麼它們就應該擁有一樣的hash code
hashCode
的常規協定是:
在 Java 應用程序執行期間,在對同一對象屢次調用 hashCode 方法時,必須一致地返回相同的整數,前提是將對象進行 equals 比較時所用的信息沒有被修改。從某一應用程序的一次執行到同一應用程序的另外一次執行,該整數無需保持一致。
若是根據 equals(Object) 方法,兩個對象是相等的,那麼對這兩個對象中的每一個對象調用 hashCode
方法都必須生成相同的整數結果。
若是根據 equals(java.lang.Object)
方法,兩個對象不相等,那麼對這兩個對象中的任一對象上調用 hashCode 方法不 要求必定生成不一樣的整數結果。可是,程序員應該意識到,爲不相等的對象生成不一樣整數結果能夠提升哈希表的性能。
實際上,由 Object 類定義的 hashCode 方法確實會針對不一樣的對象返回不一樣的整數。(這通常是經過將該對象的內部地址轉換成一個整數來實現的,可是 JavaTM 編程語言不須要這種實現技巧。)
public final native void notify()
喚醒在此對象監視器上等待的單個線程。若是全部線程都在此對象上等待,則會選擇喚醒其中一個線程。選擇是任意性的,並在對實現作出決定時發生;
喚醒在此對象監視器上等待的全部線程。
在其餘線程調用此對象的 notify() 方法或 notifyAll() 方法前,致使當前線程等待。
在其餘線程調用此對象的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量前,致使當前線程等待。
在其餘線程調用此對象的 notify() 方法或 notifyAll() 方法,或者其餘某個線程中斷當前線程,或者已超過某個實際時間量前,致使當前線程等待。
返回該對象的字符串表示。