国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java Object你真的了解了嗎

2019-11-06 06:39:06
字體:
來源:轉載
供稿:網友

導讀: 在平時的coding中hashCode()和equals()的使用的場景有哪些?clone深復制怎么實現?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有沒有跟我一樣,想好好的了解一下的。畢竟是基礎中的基礎。下面給出一個簡單比較全面的概要:

1. hashCode()和equals()

public boolean equals(Object obj) {return (this == obj);}

public native int hashCode();

當equals()方法被override時,hashCode()也要被override.

當equals()返回true,hashcode一定相等。即:相等(相同)的對象必須具有相等的哈希碼(或者散列碼)

如果兩個對象的hashCode相同,它們并不一定相同。

在集合查找時,hashcode能大大降低對象比較次數,提高查找效率!

在判斷重復元素時,直接通過hashcode()方法,定位到桶位置,如果該位置有元素,再調用equals()方法判斷是否相等。而不是遍歷每一個元素比較equals()!

2. clone() 深復制

public class Animal implements Cloneable { PRivate int height; private int age; public Animal(int height, int age){ this.height = height; this.age = age; } @Override public Object clone() throws CloneNotSupportedException { return super.clone(); }}public class People implements Cloneable { private int height; private int age; private Animal a; public People(int height, int age,Animal a){ this.height = height; this.age = age; this.a = a; } @Override public Object clone() throws CloneNotSupportedException { People p = (People) super.clone(); p.a = (Animal) a.clone(); return p; }}Animal a1 = new Animal(100,3);People p1 = new People(173,24,a1);//深復制People p2 = (People) p1.clone();

3. wait()和notify()

只有獲得該對象鎖之后才能調用,否則拋IllegalMonitorStateException異常

任何一個時刻,對象的控制權(monitor)只能被一個線程擁有。

線程取得控制權的方法有三:

執行對象的某個同步實例方法。

執行對象對應類的同步靜態方法。

執行對該對象加同步鎖的同步塊。

執行對該對象加同步鎖的示例:

synchronized (pepoleObject) { pepoleObject.notifyAll(); pepoleObject.wait(); }

4. finalize()

當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾加收器調用此方法,只能調用一次。當對象被回收時需要配置系統資源或執行其他清除,子類重寫finalize方法實現。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广西| 肥城市| 罗平县| 怀化市| 新乡市| 油尖旺区| 仙居县| 安塞县| 鸡泽县| 城口县| 大同县| 巴塘县| 都江堰市| 瓮安县| 淄博市| 珲春市| 德惠市| 邢台市| 政和县| 阿克陶县| 聂荣县| 河北区| 罗田县| 芒康县| 青浦区| 洪雅县| 太原市| 武邑县| 威宁| 西安市| 谢通门县| 济阳县| 卢龙县| 腾冲县| 郎溪县| 尼木县| 青海省| 体育| 乌恰县| 嘉善县| 威远县|