周末了,,有時間更新一下。周末好象也沒什么特別,,除了多睡點和看看書之外,,無事可做,,可憐的單身生涯。 異常,,復雜的話題了,。 一。首先看看下面這個例子,,到底返回true還是false呢,?還是根本編譯不通過: public class Indecisive { static boolean decision() { 答
案是false,finaly語句塊總是在程序控制權從try塊離開時開始執(zhí)行,,無論try語句塊中是以正常方式或者意外行為結束,。當try塊與
finaly塊都以意外方式結束,整個try..finaly的意外結束的原因將與finaly語句塊意外結束的原因相同,,即try塊意外結束的原因將被
拋棄,。對于finaly的使用,需要記?。?/p>
每一個finaly語句塊都應該被正常結束,,除非拋出非受控異常。在finaly語句塊中不應該使用break,continue,return或者throw來退出,,不應當讓受控異常傳播到finaly之外,。 等等,我們再來看個例子,,下面的finaly塊會被執(zhí)行嗎,?? public class HelloGoodbye { 很 抱歉,,它只打印:Hello World,finaly語句并沒有被執(zhí)行,,這是為何,?這是因為System.exit方法將立刻終止當前程序的所有線程,使得finaly塊根本沒機會 被調用,。System.exit執(zhí)行兩步操作,,首先就是停止當前所有線程,其次就是在關閉VM之前執(zhí)行Shut down Hook(關閉掛鉤),。如果我們希望在VM關閉之前執(zhí)行一些操作,,這些操作應該在Runtime.addShutDownHook上注冊,因此,,上面的程 序可以修改為: public class HelloGoodbye {
二,。來看看一些不可思議的程序。 第一個程序: import java.io.IOException; public class Arcane1 { 試著編譯下,,sorry,,不能通過,。報錯: 在相應的try語句主體中不能拋出異常java.io.IOException 錯誤信息已經很明顯地告訴我們原因了,System.out.println方法并不能拋出受控異常IOException,。這在JAVA語言規(guī)范中已經有描述,,如果catch所捕捉的受控異常在try塊里并不能被拋出,這將是一個編譯期錯誤,! 第2個程序: public class Arcane2 { 編譯竟然通過了,,這不是跟我們第一個程序得到的結論有矛盾?,?這又是因為JAVA語言規(guī)范所決定的,,捕獲Exception或者Throwable的catch語句都是合法,不管他們的try塊語句的內容是什么,。特例,,特例^_^ 第3個程序,有點長了,,首先定義3個接口: interface Type1 { interface Type2 { interface Type3 extends Type1, Type2 { 接口Type3繼承Type1,Type2(JAVA中接口是可以多重繼承的),,Type1,Type2的f()方法各拋出一個受控異常。接著看: public class Arcane3 implements Type3 { public static void main(String[] args) { 編 譯通過,,打印Hello World!可是我明明聲明了兩個受控異常啊,,怎么實現(xiàn)類都不用處理了?,?不是要放在一個try..catch塊里面才行,??原因就在于一個方法可以拋出 的受控異常的集合是它所適用所有類型(即父類型,,此例中的Type1,Type2)聲明要拋出的受控異常的交集,,而不是并集!
三,。初始化與異常,。構造函數(shù)必須聲明其實例初始化操作中會拋出的所有受控異常。類中值域的初始化操作是在調用構造函數(shù)之前發(fā)生的,。不要濫用異常,,比如使用異常去控制循環(huán),應該只為異常條件而使用異常,。 四,。刪除類,書中的謎題44,,我不能完全理解,,待續(xù),如有朋友有好的見解,,最好共享下,。 五,。以一個看似會無限循環(huán)的遞歸程序結尾,其實因為JVM的棧的深度有限,,此程序總會終結,,可時間恐怕要在你我骨灰已經歷N個物質循環(huán)之后: public class Workout { private static void workHard() { Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=726869 |
|
來自: ShangShujie > 《java》