Java day15【第二十七章】异常的捕获及处理
【第二十七章】异常的捕获及处理
一.认识异常对程序的影响
异常:异常指的是导致程序中断的一种指令流。
当程序有异常出现时,程序将不会根据既定的步骤执行完毕,而将终止于异常发生处。
为了保证程序出现非致命错误后仍然能正常完成,所以就需要有个完善的异常处理机制。
二.处理异常
在JAVA之中如果要进行异常的处理,可以使用:try、catch、finally这几个关键字,基本的处理结构如下:
/*** try{ //可能出现异常的语句 }[catch(异常类型 异常语句){ //异常处理 }[catch(异常类型 异常语句){ //异常处理 }[catch(异常类型 异常语句){ //异常处理 }...][finally{ //不管是否出现异常都要执行. }] ***/
在此格式之中可以使用的组合为:try...catch、try...catch...finally、try...finally。
范例:处理异常:
public class Enumo { public static void main(String args[]){ System.out.println("开始执行程序"); try{ System.out.println("数学计算:"+(10/0)); }catch(ArithmeticException e){ System.out.println(e); } System.out.println("程序执行完毕"); } }
输出如下:
开始执行程序 java.lang.ArithmeticException: / by zero 程序执行完毕
此时如果要想打印完整的异常类信息,则需要使用异常类处理提供的printStackTrace()方法
观察:
public class Enumo { public static void main(String args[]){ System.out.println("开始执行程序"); try{ System.out.println("数学计算:"+(10/0)); }catch(ArithmeticException e){ e.printStackTrace(); } System.out.println("程序执行完毕"); } }
此时输出为下:
开始执行程序 java.lang.ArithmeticException: / by zero at Example.Enumo.main(Enumo.java:45) 程序执行完毕
处理异常可以在最后追加一个finally程序块,表示异常处理后的出口,不管是否出现异常都执行。
public class Enumo { public static void main(String args[]){ System.out.println("开始执行程序"); try{ System.out.println("数学计算:"+(10/0)); }catch(ArithmeticException e){ e.printStackTrace(); }finally{ System.out.println("【F】不管程序异常是否处理,程序都继续执行"); } System.out.println("程序执行完毕"); } }
如果即便有了异常处理语句,如果没有进行正确的异常捕获,那么也会导致程序中断(finally依然执行)。
三.处理多个异常:
很多时候程序产生多个异常,多个catch进行异常捕获。
public class Enumo { public static void main(String args[]){ System.out.println("开始执行程序"); try{ int x = Integer.parseInt(args[0]); int y = Integer.parseInt(args[1]); System.out.println("数学计算:"+(x/y)); }catch(ArithmeticException e){ e.printStackTrace(); }finally{ System.out.println("【F】不管程序异常是否处理,程序都继续执行"); } System.out.println("程序执行完毕"); } }
比如上面这个程序,会有三个异常:
1.【未处理】程序执行的时候没有输入初始化参数 (javaJavaDemo): java.lang.ArrayIndexOutOfBoundsException
2.【未处理】程序输入的不是数字,字母(java JavaDemo a b):java.lang.NumberFormatError
3.【已处理】输入的被除数为0
如果我们开发者都已经明确的知道了有哪些异常了,那么异常处理有什么用呢,为什么不多写几个判断语句。