1. 程式人生 > 實用技巧 >5_面向物件-中之Object類的使用

5_面向物件-中之Object類的使用

1.java.lang.Object類的說明:
  * 1.Object類是所有Java類的根父類
  * 2.如果在類的宣告中未使用extends關鍵字指明其父類,則預設父類為java.lang.Object類
  * 3.Object類中的功能(屬性、方法)就具通用性。
  * 屬性:無
  * 方法:equals() / toString() / getClass() /hashCode() / clone() / finalize()
  * wait() 、 notify()、notifyAll()
  *
  * 4. Object類只聲明瞭一個空參的構造器

2.equals()方法 

  2.1 equals()的使用:

    1. 是一個方法,而非運算子
    * 2. 只能適用於引用資料型別
    * 3. Object類中equals()的定義:
    * public boolean equals(Object obj) {
    return (this == obj);
    }
    * 說明:Object類中定義的equals()和==的作用是相同的:比較兩個物件的地址值是否相同.即兩個引用是否指向同一個物件實體
    *
    * 4. 像String、Date、File、包裝類等都重寫了Object類中的equals()方法。重寫以後,比較的不是

    * 兩個引用的地址是否相同,而是比較兩個物件的"實體內容"是否相同。
    *
    * 5. 通常情況下,我們自定義的類如果使用equals()的話,也通常是比較兩個物件的"實體內容"是否相同。那麼,我們
    * 就需要對Object類中的equals()進行重寫.
    * 重寫的原則:比較兩個物件的實體內容是否相同.

  2.2 如何重寫equals()

  

2.2.1 手動重寫舉例:
class User{
String name;
int age;
    //重寫其equals()方法
    public boolean equals(Object obj){
        
if(obj == this){ return true; } if(obj instanceof User){ User u = (User)obj; return this.age == u.age && this.name.equals(u.name); } return false; } } 2.2.2 開發中如何實現:自動生成的

  2.3 回顧 == 運算子的使用:

    * == :運算子
    * 1. 可以使用在基本資料型別變數和引用資料型別變數中
    * 2. 如果比較的是基本資料型別變數:比較兩個變數儲存的資料是否相等。(不一定型別要相同)
    * 如果比較的是引用資料型別變數:比較兩個物件的地址值是否相同.即兩個引用是否指向同一個物件實體
    * 補充: == 符號使用時,必須保證符號左右兩邊的變數型別一致。

3. toString()方法     

  3.1 toString()的使用:
    1. 當我們輸出一個物件的引用時,實際上就是呼叫當前物件的toString()
    *
    * 2. Object類中toString()的定義:
    * public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }
    *
    * 3. 像String、Date、File、包裝類等都重寫了Object類中的toString()方法。
    * 使得在呼叫物件的toString()時,返回"實體內容"資訊
    *
    * 4. 自定義類也可以重寫toString()方法,當呼叫此方法時,返回物件的"實體內容"
  3.2 如何重寫toString()

3.2 如何重寫toString()
舉例:
//自動實現
    @Override
    public String toString() {
        return "Customer [name=" + name + ", age=" + age + "]";
    }

4.面試題: 

① final、finally、finalize的區別?
② == 和 equals() 區別