try就像一個網,把try{}里面的代碼所拋出的異常都網住,然后把異常交給catch{}里面的代碼去處理。最后執行finally之中的代碼。無論try中代碼有沒有異常,也無論catch是否將異常捕獲到,finally中的代碼都一定會被執行。
雖然 Java 執行時期系統所提供的預設處理器對除錯很有用,你通常想要自己處理例外。這樣做有兩個優點:第一,它讓你修正錯誤。第二,它可以避免程式自動終止。每當錯誤發生時,如果你的程式就停止而且列印出堆疊追蹤,大多數的使用者都會感到很困惑。很幸運,你很容易就能避免這種情形。
要防備并且處理執行時期錯誤,只要將你要監視的程式碼放在 try 區塊里即可。在 try 區塊之后緊接著在 catch 子句里指定你希望捕捉的例外型態
錯誤捕捉例子:
try { code; //將自己的代碼放在其中; } catch(e) //如果上面的代碼有錯誤,這里就捕獲 { alert(e.number); //獲得錯誤信息 }
例如:
import java.io.*;//調用io包 public class SimpleCharInOut { public static void main(String args[]) { char ch=' ';//定義個字符ch初始為‘ ' System.out.println(" Enter a character please");//在屏幕上輸出Enter a character please try {//你要監視的程式碼放在 try 區塊里即可。在 try 區塊之后緊接著在 catch 子句里指定你希望捕捉的例外型態 ch=(char)System.in.read();//將從鍵盤輸入的字符賦給ch } catch(IOException e) //如果上面的代碼有錯誤,這里就捕獲 { } ;//錯誤后不進行操作 System.out.println("You're entered character:" + ch);// 在屏幕上輸出You're entered character: //和ch的值 } }
我們在寫Java的try..catch的時候,往往需要在最后加上finally子句關閉一些IO資源,比如
InputStream is;try{ is=openInputStream(); // do something}catch(IOException e){ e.printStaceTrace(e);}finally{ try{ is.close(); }catch(IOException e ){ }}
但是在使用這種模式時,即使是Java老手,偶爾也會犯一些錯誤。比如上面這段代碼,當openInputStream()函數在執行過程中拋出異常,那么變量is的值仍為null,此時執行is.close()會拋出NullPointerException. 由于NullPoiterException不是IOException的子類,因此它不能被catch塊捕獲,而是直接往調用層拋出去. 一種改進的寫法就是在關閉流的時候先進行非空判斷,但這樣代碼會顯得很 主站蜘蛛池模板: 清镇市| 客服| 红桥区| 伊金霍洛旗| 馆陶县| 杨浦区| 湟中县| 宝应县| 阳春市| 辉县市| 明星| 涞水县| 建瓯市| 伊春市| 福鼎市| 嘉峪关市| 怀安县| 英山县| 安图县| 封丘县| 奉化市| 龙川县| 惠来县| 武隆县| 亳州市| 治县。| 灵山县| 江北区| 武穴市| 曲靖市| 泾川县| 高陵县| 开化县| 星子县| 乳山市| 阜新市| 兰坪| 邵阳县| 正定县| 靖西县| 滁州市|