第10章 例外丛理 例外处理入门 受检丶执行时期例外 throw、 throws 例外的继承架构
第10章 • 例外处理 – 例外处理入门 – 受检、执行时期例外 – throw、throws – 例外的继承架构
例外处理入门 想尝试捕捉例外,可以使用"try"、" catch" " final!y"三个尖键词组合的语法来达到 try i //陈句 catch(例外型态名称){ //例外处理 finally i //一定会处理的区块
例外处理入门 • 想尝试捕捉例外,可以使用"try"、"catch"、 "finally"三个关键词组合的语法来达到 try { //陈述句 } catch(例外型态 名称) { //例外处理 } finally { //一定会处理的区块 }
例外处理入门 public class checkArgs Demo i public static void main(string[] args)[ try i System.out. printf("执行号s功能器n",args[01); catch (Array IndexOutofBoundsException e) System.out. println("没有指定自变量"); e printstackTrace()i
例外处理入门 public class CheckArgsDemo { public static void main(String[] args) { try { System.out.printf("执行%s功能%n", args[0]); } catch(ArrayIndexOutOfBoundsException e) { System.out.println("没有指定自变量"); e.printStackTrace(); } } }
例外处理入门 例外处理最好只用于错误处理,而不应是 用于程序业务逻辑的一部份,因为例外的 产生要消耗瓷源
例外处理入门 • 例外处理最好只用于错误处理,而不应是 用于程序业务逻辑的一部份,因为例外的 产生要消耗资源
例外处理入 以下应用例外处理的方式就不适当 while(true) try t System. out. println(args[i])i +; catch(ArrayIndexOutofBounds Exception e)t 下面的方式才是正确的 for(int i=0; i< args. length i++) System. out. println(args[i])i
例外处理入门 • 以下应用例外处理的方式就不适当 • 下面的方式才是正确的 while(true) { try { System.out.println(args[i]); i++; } catch(ArrayIndexOutOfBoundsException e) { // .... } } for(int i = 0; i < args.length; i++) { System.out.println(args[i]); }
受检例外、执行时期例外 在某些情况下例外的发生是可预期的 例如使用输入输出功能 ·错误是可预期发生的这类例外称之为「受 检例外」( Checked Exception) 受检例外编译程序会要求您进行例外处理 在使用 java. Io. Buffered Reader的 BreadLine方 法取得使用者输人时’编译程序会要求您于程 序代码中明确告知如何处理 java. io IOEXception
受检例外、执行时期例外 • 在某些情况下例外的发生是可预期的 – 例如使用输入输出功能 • 错误是可预期发生的这类例外称之为「受 检例外」(Checked Exception) • 受检例外编译程序会要求您进行例外处理 – 在使用java.io.BufferedReader的readLine()方 法取得使用者输入时,编译程序会要求您于程 序代码中明确告知如何处理 java.io.IOException
受检例外、执行时期例外 如果您不在程序中处理的话,例如捋 EXCeption的" catch"区块拿掉 CheckedExceptionDemo. java: 9: unreported exception java. io IOException; must be caught or declared to be thrown
受检例外、执行时期例外 • 如果您不在程序中处理的话,例如将 IOException的"catch"区块拿掉 CheckedExceptionDemo.java:9: unreported exception java.io.IOException; must be caught or declared to be thrown
受检例外、执行时期例外 try i Bufferedreader buf new BufferedReader( new Input streamReader(System. in))i System.out, print("请输入整數:"); int input Integer parseInt(buf readline())i System. out. println(input x 10 ="+(input*10))i catch(IOException e) i / Checked Exception System.out. println("I/o错誤"); catch(NumberFormatException e)i // Runtime Exception System.out. println("输入必须为整數");
受检例外、执行时期例外 try { BufferedReader buf = new BufferedReader( new InputStreamReader(System.in)); System.out.print("请输入整數: "); int input = Integer.parseInt(buf.readLine()); System.out.println("input x 10 = " + (input*10)); } catch(IOException e) { // Checked Exception System.out.println("I/O错誤"); } catch(NumberFormatException e) { // Runtime Exception System.out.println("输入必须为整數"); }
受检例外、执行时期例外 像 Number FortmatEXception例外是「执行 时期例外」( Runtime exception) 例外是发生在程序执行期间,并不一定可 预期它的发生,编译程序不要求您一定要 处理 对于执行时期例外若没有处理,则例外会 直往外丢,最后由小VM来处理例外, JVM所作的就是显示例外堆栈讯息
受检例外、执行时期例外 • 像NumberFortmatException例外是「执行 时期例外」(Runtime exception) • 例外是发生在程序执行期间,并不一定可 预期它的发生,编译程序不要求您一定要 处理 • 对于执行时期例外若没有处理,则例外会 一直往外丢,最后由JVM来处理例外, JVM所作的就是显示例外堆栈讯息
throw、 throws 想要自行丟出例外,可以使用" throw"天键 词,并生成指定的例外对象 try i double data =100/0.0; System.out. println("浮点数零除:"+data); if(string valueof (data).equals("Infinity)) throw new ArithmeticException("除零例外") catch(ArithmeticException e) System. out. println(e)
throw、throws • 想要自行丢出例外,可以使用"throw"关键 词,并生成指定的例外对象 try { double data = 100 / 0.0; System.out.println("浮点数零除:" + data); if(String.valueOf(data).equals("Infinity")) throw new ArithmeticException("除零例外"); } catch(ArithmeticException e) { System.out.println(e); }