拋出異常 拋出異常有三種形式,一是throws,,一個throw,,還有一種系統(tǒng)自動拋異常。下面它們之間的異同: 1.throws是方法可能拋出異常的聲明,。(用在聲明方法時,,表示該方法可能要拋出異常) throws 用于拋出方法層次的異常,并且直接由些方法調(diào)用異常處理類來處理該異常,,所以它常用在方法的后面。 語法:[(修飾符)](返回值類型)(方法名)([參數(shù)列表])[throws(異常類)]{......} public void function() throws Exception{......} 當某個方法可能會拋出某種異常時用于throws 聲明可能拋出的異常,,然后交給上層調(diào)用它的方法程序處理,。 范例一: public class TestDemo{ public static void function() throws NumberFormatException{ String s = '沐兮沐楚'; System.out.println(Double.parseDouble(s)); } public static void main(String[] args) { try{ function(); }catch(NumberFormatException e){ System.out.println('非數(shù)據(jù)類型不能轉(zhuǎn)換'); e.printStackTrace();//打印出異常,并顯示出更深的調(diào)用信息 } } } 執(zhí)行結果: 非數(shù)據(jù)類型不能轉(zhuǎn)換 java.lang.NumberFormatException: For input string: '沐兮沐楚' at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at TestDemo.function(TestDemo.java:4) at TestDemo.main(TestDemo.java:8) 2.throw是語句拋出一個異常,。 throw 用于方法塊里面的代碼,,比throws的層次要低,比如try...catch ....語句塊,,表示它拋出異常,,但它不會處理它,而是由方法塊的throws Exception來調(diào)用異常處理類來處理,。 語法:throw (異常對象); throw e; 一般會用于程序出現(xiàn)某種邏輯時程序員主動拋出某種特定類型的異常,。 范例二: public class TestDemo{ public static void main(String[] args) { String s = '沐兮沐楚'; if(s.equals('沐兮沐楚')){ throw new NumberFormatException(); }else{ System.out.println(s); } } } 執(zhí)行結果:(會拋出異常) Exception in thread 'main' java.lang.NumberFormatException at TestDemo.main(TestDemo.java:5) 3.系統(tǒng)自動拋出的異常 所有系統(tǒng)定義的編譯和運行異常都可以由系統(tǒng)自動拋出,稱為標準異常,,并且 Java 強烈地要求應用程序進行完整的異常處理,,給用戶友好的提示,或者修正后使程序繼續(xù)執(zhí)行,。 當程序語句出現(xiàn)一些邏輯錯誤,、主義錯誤或類型轉(zhuǎn)換錯誤時,系統(tǒng)會自動拋出異常,。 范例三: public class TestDemo{ public static void main(String[] args) { int a = 5; int b = 0; System.out.println(a/b); } } 執(zhí)行結果:(系統(tǒng)會自動拋出ArithmeticException異常) Exception in thread 'main' java.lang.ArithmeticException: / by zero at TestDemo.main(TestDemo.java:5) 范例四: public class TestDemo{ public static void main(String[] args) { String s = '沐兮沐楚'; System.out.println(Double.parseDouble(s)); } } 執(zhí)行結果(系統(tǒng)會自動拋出NumberFormatException異常): Exception in thread 'main' java.lang.NumberFormatException: For input string: '沐兮沐楚' at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110) at java.lang.Double.parseDouble(Double.java:538) at TestDemo.main(TestDemo.java:4) throw與throws的區(qū)別 1,、throws出現(xiàn)在方法函數(shù)頭;而throw出現(xiàn)在函數(shù)體,。 2,、throws表示出現(xiàn)異常的一種可能性,并不一定會發(fā)生這些異常;throw則是拋出了異常,,執(zhí)行throw則一定拋出了某種異常對象,。 3、兩者都是消極處理異常的方式(這里的消極并不是說這種方式不好),,只是拋出或者可能拋出異常,,但是不會由函數(shù)去處理異常,真正的處理異常由函數(shù)的上層調(diào)用處理,。 好的編程習慣: 1.在寫程序時,,對可能會出現(xiàn)異常的部分通常要用try{...}catch{...}去捕捉它并對它進行處理; 2.用try{...}catch{...}捕捉了異常之后一定要對在catch{...}中對其進行處理,,那怕是最簡單的一句輸出語句,,或棧輸入e.printStackTrace(); 3.如果是捕捉IO輸入輸出流中的異常,一定要在try{...}catch{...}后加finally{...}把輸入輸出流關閉,; 4.如果在函數(shù)體內(nèi)用throw拋出了某種異常,,最好要在函數(shù)名中加throws拋異常聲明,然后交給調(diào)用它的上層函數(shù)進行處理,。 |
|
來自: 2017helloworld > 《學術性》