雖然瞭解一些有關 Java 的異常處理,可是發現本身對 throw 和 throws 兩者還不是很清楚,因此想深刻的理解理解。java
系統自動拋出異常、throw 和 throws三種方式。code
一、系統自動拋出異常orm
public class ThrowTest { public static void main(String[] args) { int a = 0; int b = 1; System.out.println(b / a); } }
運行該程序後系統會自動拋出 ArithmeticException 算術異常。對象
Exception in thread "main" java.lang.ArithmeticException: / by zero at com.sywf.study.ThrowTest.main(ThrowTest.java:8)
二、throw
throw 指的是語句拋出異常,後面跟的是對象,如:throw new Exception,通常用於主動拋出某種特定的異常,如:string
public class ThrowTest { public static void main(String[] args) { String string = "abc"; if ("abc".equals(string)) { throw new NumberFormatException(); } else { System.out.println(string); } } }
運行後拋出指定的 NumberFormatException 異常。it
Exception in thread "main" java.lang.NumberFormatException at com.sywf.study.ThrowTest.main(ThrowTest.java:8)
三、throws
throws 用於方法名後,聲明方法可能拋出的異常,而後交給調用其方法的程序處理,如:io
public class ThrowTest { public static void test() throws ArithmeticException { int a = 0; int b = 1; System.out.println(b / a); } public static void main(String[] args) { try { test(); } catch (ArithmeticException e) { // TODO: handle exception System.out.println("test() -- 算術異常!"); } } }
程序執行結果:class
test() -- 算術異常!
一、throw 出如今方法體內部,而 throws 出現方法名後。
二、throw 表示拋出了異常,執行 throw 則必定拋出了某種特定異常,而 throws 表示方法執行可能會拋出異常,但方法執行並不必定發生異常。thread