Object類是全部類、數組、枚舉的父類,當咱們定義一個類未使用extends
關鍵字去顯示指定父類時,則表示該類默認繼承了Object父類。java
boolean equals(Object obj)
:判斷兩個對象是否爲同一個對象;protected void finalize()
:JVM的垃圾回收GC器能夠使用來清理對象(無引用變量應用該對象,具體可查看JVM中可達性分析等算法)Class<?> getClass()
:返回該對象的運行時類;String toString()
:返回對象的字符串表示輸出;Object類的toString()方法返回的值爲「運行時類名@十六進制的hashCode值」;int hashCode()
:返回對象的hashCode值;wait()
:致使當前線程處於等待狀態,直至其餘線程調用該同步監聽器的notify()或者notifyAll()方法喚醒它。調用wait()方法的當前線程會釋放對該同步監視器的鎖定。wait()方法有三種形式:無時間參數、帶毫秒參數的和帶毫秒、毫微秒參數的。第一種是一直等待,直到其餘線程通知;第2、三種是等待指定時間後自動醒來。notify()
:喚醒在該同步監視器上等待的單個線程,若全部線程都在這個同步監視器上等待,就會任意選擇其中一個線程進行喚醒。只有當前線程釋放該同步監視器的鎖定後,才能執行被喚醒的線程。notifyAll()
:喚醒在該同步監視器上等待的全部線程;只有當前線程釋放該同步監視器的鎖定後,才能執行被喚醒的線程。protected clone()
:拷貝、克隆對象,獲得一個當前對象的副本,屬於淺複製,只會拷貝對象的成員變量,若是拷貝的對象內部還有對象,則不會進行拷貝。若是想實現對象中的引用變量(對象中的對象)則須要實現「遞歸」拷貝/克隆(深拷貝),繼續對下一級對象進行拷貝。附:上述提到的同步監視器是指synchronized
等關鍵字修飾的同步方法,則同步監視器即爲該類的默認實例(this);或者是synchronized
修飾的同步代碼塊,此時同步監視器即爲synchronized後面括號中的對象。算法
既然提到clone()
方法,有必要提一下如何實現自定義類的拷貝/克隆。數組
Cloneable
接口;clone()
方法;clone()
方法中須要有super.clone()
來調用Object類實現的clone()
方法去獲取該對象的副本,並返回該副本。二級對象:測試
public class PersonInformation { String address; int telephoneNumber; public PersonInformation(String address, int telephoneNumber) { this.address = address; this.telephoneNumber = telephoneNumber; } }
一級對象:this
public class Person implements Cloneable { String name; int age; PersonInformation personInfo; public Person(String name, int age) { this.name = name; this.age = age; personInfo = new PersonInformation("江蘇-南京", 188xx11xx22) } // 實現clone()方法 public Person clone() throws CloneNotSupportedException{ return (Person)super.clone(); } }
測試:線程
public class CloneTest { public static void main(String[] args) throws CloneNotSupportedException { Person person1 = new Person("小紅", 20); // clone拷貝獲得person1的對象副本 Person person2 = person1.clone(); //判斷兩個對象是否相等; System.out.println(person1 == person2); // 判斷兩個對象中的引用變量是否相等; System.out.prinln(person1.personInfo == person2.personInfo); } }
結果:code
true false