Object介紹

1.方法簡介

    1> Object clone()   ---->創建並返回對象的副本

    2> boolean equals(Object obj)   -->某個其他對象是否與該對象“相等”

    3> void finalize()   --->當垃圾回收器確定不存在該對象的更多引用時,由對象的垃圾回收器調用此方法進行回收

    4> Class getClass()   --->  返回一個對象運行時類

    5> int hashCode   --->返回對象的哈希碼值

    6>void notify    --->喚醒在此對象監視器上等待的單個進程。

    7> void notifyAll  ---> 喚醒在此對象監視器上等待的所有進程

    8>String toString()  --->返回該對象的字符串表示

    9> void wait()  ---->導致當前對象等待,直到其他線程調用該對象的notify()或是notifyAll()方法

    10> void wait(long timeout)  --->導致當前對象等待,直到其他線程喚醒或是超過指定的時間量

    11> void wait(long timeout,int nanos)  --->...........或者某個其他線程中斷當前線程。

2.重點說明

    1>hashCode ,常規規定:在java應用程序執行期間,同一對象調用hashCode(),必須返回相同的整數。前提是equals比較中所用的信息沒有被修改。不同程序的執行,無需一致。如果根據equals(Object)調用兩個對象相等,則hashCode也是相同的。

    2>equals隊形必須是同一對象的引用,纔會true。重寫該方法,爲了維護常規規定,要重寫hashCode

    3>clone, 這裏對象的副本是淺複製。

        淺複製:被複制對象的所有變量都含有與原來對象相同的值,而所有的對其他對象的引用,仍指向其原來的對象                        (僅複製所考慮的對象,而不復制所引用的對象)

        深複製:引用其他對象的變量將指向被複制的新的對象。(把複製的對象所引用的所有對象都複製一遍)

        Cloneable實現其接口可重寫clone方法,o=(student)super.clone;;;;如果是深複製,則要在重寫的方法中進行其他引用複製:o.p=(Teacher)p.clone();

        如果引用層次比較高,要層層深度clone,且每個對象都要實行Cloneable接口,比較麻煩,可以用序列化。

        對象序列化:將對象的狀態轉化爲字節流,再通過這些值生成相同狀態的對象。對象都實現Serializable接口。

                            public Object deepClone()throws...{

                                  ByteArrayOutputstream bo=new ByteArrayOutputStream();

                                  ObjectOutputstream oo=new ObjectOutputStream(bo);

                                  oo.writeObject(this);   //將對象寫在流裏

                                  ByteArrayInputStream bi=new ByteArrayInputStream();

                                  ObjectInputStream oi=new ObjectInputStream(bi);

                                  return(oi.readObjct());   //叢流裏讀出來

                            }

    4>toString()    返回:getClass.getName+'@'+Integer.toHexString(hashCode())   此對象哈希碼的無符號十六進制

    5> notify()   選擇一個線程喚醒,是任意的。競爭的結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章