讀後的碎嘴子(第四章)

第四章--異常問題
36.
boolean decision() {
try {
return true;
} finally {
return false;
}
}
返回是什麼呢?印象中finally的返回好像是要給try中的返回讓路的啊?但是返回的是false,具體的要複習異常的順序特性
總結:在finally一定要正常的結束(不要有return,break,continue,throw),就算裏面有受查異常,也要在裏面處理

37.代碼比較多,大師豪爽的給了3個例子,前兩個其實不重要,最後一個很容易被忽視,接口A擴展了多個聲明各種了throws方法的接口,那麼實現接口A的類裏的相應方法,能throws的異常是這些接口方法聲明中的交集而不是並集,在這裏用簡短的話表達比較難以理解,請見原書
總結:聲明的異常在繼承體系中傳遞規律要深刻理解

38.這條太學術了,相信IDE就好了

39.
try {
System.out.println("Hello world");
System.exit(0);
} finally {
System.out.println("Goodbye world");
}
答案應該看得出來,這次finally永遠不會被執行了,大師還大致地描述了VM關閉時的一些過程
總結:當調用System.exit(int i),會運行所有註冊的shutdownHook

40.
public class Test {	
private Test instance = new Test();
public static void main(String... args){
Test test = new Test();
}
}
把例子給簡化了,這種互相依賴的死循環還是經常會搞出來的,這條其實和異常沒什麼關係了,解決方法是很簡單的
總結:field初始化順序優先於其構造方法執行

41.這是個經典的IO關閉問題
總結:要注意各種流的close()方法也是會拋出IOException的,如果你手快在方法聲明上寫了throws IOException會隱藏這個隱患,同時根據36條,要在內部處理掉這樣的異常

42.這個例子其實沒問題,在這裏說明&和&&的區別好像有點牽強
總結:不要把異常處理參與到正常的邏輯中,這是個基本常識,非要再加一條的話,就是類似&和&&這樣的不要寫混,IDE是不會提示這樣的問題的

43.這裏並不是要討論爲什麼要禁用Thread.stop()和Thread.suspend()方法,而是要意識到在方法中throw受查異常是可以通過一些手段,不在聲明中寫throws的,這條看得不是很懂,它很不面向應用開發者
總結:不要再使用任何Deprecated方法,不僅僅是未來會刪除的問題,還有就是反射是可以打破常規的

44.這條可以說是從開始到這裏最精彩的一條了,也是難度最大的一條,很短的代碼引發出奇異的原因,這就是大師和凡人的差距
總結:每個人都應該看看這條,儘管你平時碰不到這樣的問題

45.本章這最後一條,明顯是bloch大師的個人秀
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章