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() 區別