国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java? 教程(Object作為超類)

RichardXG / 2657人閱讀

Object作為超類

java.lang包中的Object類位于類層次結構樹的頂部,每個類都是Object類的直接或間接的后代,你使用或編寫的每個類都繼承Object的實例方法,你不需要使用任何這些方法,但是,如果你選擇這樣做,你可能需要使用特定于你的類的代碼重寫它們,本節中討論的從Object繼承的方法是:

protected Object clone() throws CloneNotSupportedException
創建并返回此對象的副本。

public boolean equals(Object obj)
指示某個其他對象是否“等于”此對象。

protected void finalize() throws Throwable
垃圾回收器在對象上執行垃圾回收時調用。
集合確定不再有對該對象的引用。

public final Class getClass()
返回對象的運行時類。

public int hashCode()
返回對象的哈希碼值。

public String toString()
返回對象的字符串表示形式。

Objectnotify、notifyAllwait方法都在同步程序中獨立運行的線程的活動中發揮作用,這將在后面的課程中討論,這里不討論,有五個方法:

public final void notify()

public final void notifyAll()

public final void wait()

public final void wait(long timeout)

public final void wait(long timeout, int nanos)

注意:許多方法都有一些微妙的方面,尤其是clone方法。
clone()方法

如果某個類或其中一個超類實現了Cloneable接口,則可以使用clone()方法從現有對象創建副本,要創建克隆,請編寫:

aCloneableObject.clone();

Object的此方法實現檢查調用clone()的對象是否實現Cloneable接口,如果對象沒有,則該方法拋出CloneNotSupportedException異常,稍后的課程將介紹異常處理,目前,你需要知道clone()必須聲明為:

protected Object clone() throws CloneNotSupportedException

public Object clone() throws CloneNotSupportedException

如果要編寫clone()方法來覆蓋Object中的方法。

如果調用clone()的對象確實實現了Cloneable接口,對象的clone()方法實現創建與原始對象相同的類的對象,并初始化新對象的成員變量,使其具有與原始對象的相應成員變量相同的值。

使類可克隆的最簡單方法是將implements Cloneable添加到類的聲明中,然后你的對象可以調用clone()方法。

對于某些類,Objectclone()方法的默認行為可以正常工作,但是,如果一個對象包含對外部對象的引用,比如說ObjExternal,則可能需要重寫clone()以獲得正確的行為,否則,一個對象對ObjExternal所做的更改也將在其克隆中可見,這意味著原始對象及其克隆不是獨立的 — 要將它們分離,你必須重寫clone()以便它克隆對象和ObjExternal,然后原始對象引用ObjExternal,并且克隆引用ObjExternal的克隆,以便對象及其克隆真正獨立。

equals()方法

equals()方法將兩個對象進行相等性比較,如果它們相等則返回true,Object類中提供的equals()方法使用標識運算符(==)來確定兩個對象是否相等。對于原始數據類型,這會給出正確的結果,但是,對于對象,它沒有,Object提供的equals()方法測試對象引用是否相等 — 即,如果比較的對象是完全相同的對象。

要測試兩個對象在等價意義上是否相等(包含相同的信息),必須重寫equals()方法,以下是重寫equals()Book類的示例:

public class Book {
    ...
    public boolean equals(Object obj) {
        if (obj instanceof Book)
            return ISBN.equals((Book)obj.getISBN()); 
        else
            return false;
    }
}

考慮這段代碼來測試Book類的兩個實例是否相等:

// Swing Tutorial, 2nd edition
Book firstBook  = new Book("0201914670");
Book secondBook = new Book("0201914670");
if (firstBook.equals(secondBook)) {
    System.out.println("objects are equal");
} else {
    System.out.println("objects are not equal");
}

即使firstBooksecondBook引用了兩個不同的對象,此程序也顯示對objects are equal,它們被認為是相同的,因為比較的對象包含相同的ISBN號。

如果標識運算符不適合你的類,則應始終重寫equals()方法。

注意:如果重寫equals(),則還必須重寫hashCode()
finalize()方法

Object類提供了一個回調方法finalize(),當它變為垃圾時,可以在對象上調用它,Objectfinalize()實現什么也沒做 — 你可以重寫finalize()來執行清理,例如釋放資源。

finalize()方法可以由系統自動調用,但是什么時候調用,或者即使調用,也是不確定的,因此,你不應該依賴此方法為你進行清理。例如,如果在執行I/O后沒有在代碼中關閉文件描述符,并且你希望finalize()為你關閉它們,則可能會耗盡文件描述符。

getClass()方法

你不能重寫getClass。

getClass()方法返回一個Class對象,該對象具有可用于獲取有關類的信息的方法,例如其名稱(getSimpleName()),其超類(getSuperclass())及其實現的接口(getInterfaces()),例如,以下方法獲取并顯示對象的類名:

void printClassName(Object obj) {
    System.out.println("The object"s" + " class is " +
        obj.getClass().getSimpleName());
}

java.lang包中的Class類有很多方法(超過50個),例如,你可以測試以查看類是注解(isAnnotation()),接口(isInterface())還是枚舉(isEnum()),你可以查看對象的字段是什么(getFields())或其方法是什么(getMethods()),等等。

hashCode()方法

hashCode()返回的值是對象的哈希碼,它是十六進制的對象的內存地址。

根據定義,如果兩個對象相等,則它們的哈希碼也必須相等,如果重寫equals()方法,則更改了兩個對象的等效方式,并且ObjecthashCode()實現不再有效,因此,如果重寫equals()方法,則還必須重寫hashCode()方法。

toString()方法

你應該始終考慮重寫你的類中的toString()方法。

ObjecttoString()方法返回對象的String表示,這對調試非常有用,對象的String表示完全取決于對象,這就是你需要在類中重寫toString()的原因。

你可以使用toString()System.out.println()來顯示對象的文本表示形式,例如Book的實例:

System.out.println(firstBook.toString());

對于正確重寫的toString()方法,它會打印一些有用的東西,如下所示:

ISBN: 0201914670; The Swing Tutorial; A Guide to Constructing GUIs, 2nd Edition
上一篇:使用super關鍵字 下一篇:抽象方法和類

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/72874.html

相關文章

  • Java? 教程(繼承)

    繼承 在前面的課程中,你已經多次看到了繼承,在Java語言中,類可以從其他類派生,從而從這些類繼承字段和方法。 定義:從另一個類派生的類稱為子類(也是派生類,擴展類或子類),派生子類的類稱為超類(也是基類或父類)。 除了Object沒有超類,每個類都有一個且只有一個直接超類(單繼承),在沒有任何其他顯式超類的情況下,每個類都隱式地是Object的子類。 類可以從派生自類的類派生的類派生,依此類推,...

    Achilles 評論0 收藏0
  • Java? 教程(使用super關鍵字)

    使用super關鍵字 訪問超類成員 如果你的方法覆蓋了它的一個超類的方法,你可以通過使用關鍵字super來調用被重寫的方法,你也可以使用super來引用隱藏字段(盡管不鼓勵隱藏字段),慮這個類,Superclass: public class Superclass { public void printMethod() { System.out.println(Print...

    CKJOKER 評論0 收藏0
  • java反射-類

    摘要:使用反射可以在運行時檢視類。類名類修飾符等包信息超類所實現的接口構造函數方法屬性注解類中附加了很多信息,你可以在獲得一個完整列表。全限定名包含所有的包名。構造函數你可以訪問類的構造函數,代碼如下構造函數的詳細教程在章節。 使用反射可以在運行時檢視Java類。檢視類通常是使用反射時所做的第一件事情。從類中可以獲得下面的信息。 類名 類修飾符(private、public、synchro...

    FrancisSoung 評論0 收藏0
  • Java? 教程(將接口用作類型)

    將接口用作類型 定義新接口時,你將定義新的引用數據類型,你可以在任何可以使用任何其他數據類型名稱的地方使用接口名稱,如果定義類型為接口的引用變量,則分配給它的任何對象都必須是實現接口的類的實例。 作為示例,這里是一種用于查找一對對象中的最大對象的方法,用于從實現Relatable的類實例化的任何對象: public Object findLargest(Object object1, Object...

    Eric 評論0 收藏0
  • Java? 教程(類)

    類 在標題為面向對象的編程概念課程中對面向對象概念的介紹以自行車課為例,以賽車,山地自行車和雙人自行車為子類,下面是可能實現Bicycle類的示例代碼,為你提供類聲明的概述,本課程的后續部分將逐步備份和解釋類聲明,目前,不要關心細節。 public class Bicycle { // the Bicycle class has // three fields ...

    vvpvvp 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<