异常处理机制用来保障我们的程序更加健壮,无论用户怎么操作,都能保证我们的程序都能正常应对的一种处理机制。
一般格式如下:
try{ // 尝试让它执行业务处理,如果可以执行完成,就代表一切正常。
// 业务处理
}catch(异常1 e1){
// 进行异常1处理
}catch(异常2 e2){
// 进行异常2处理
}
举例说明1:
public class Test { public static void main(String[] args) { try { Double d1 = Double.parseDouble(args[0]); Double d2 = Double.parseDouble(args[1]); System.out.println("d1+d2=" + (d1 + d2)); } catch (ArrayIndexOutOfBoundsException e1) { System.out.println("请输入两个数字!"); } catch (NumberFormatException e2) { System.out.println("输入的必须是数字!"); } } }Java异常机制的处理流程:
异常体系图:
异常处理的完整语法格式:
try{
// 业务处理
}catch(异常 ex){ //0~N个
// 进行异常1处理
}finally{ // 0~1个
}
注意:try不能独立存在,也就是说catch块和finally块必须有一个。
finally --通常用于回收(关闭0资源,JVM会保证【finally块总会得到执行 --不管有无return语句】,但如果遇到System.exit(0);(用于退出JVM)就会阻止finally语句的执行。
异常转译
/** * @author lhy * @desription 自定义异常 */ class MyException extends RuntimeException { public MyException() { } public MyException(String msg) { super(msg); } public MyException(String detailMessage, Throwable throwable) { super(detailMessage, throwable); } } public class Test { public static void main(String[] args) { test(args); } public static void test(String[] args) { try { Integer num1 = Integer.parseInt(args[0]); Integer num2 = Integer.parseInt(args[1]); System.out.println(num1 / num2); } // 先用catch來捕捉原有的異常,再用throw拋出一个自定义异常对象; // 这种做法也称为“异常转译” catch (ArrayIndexOutOfBoundsException ae) { // 数组下标越界异常 throw new MyException("请输入两个数字"); } catch (NumberFormatException ne) { // 数字格式异常 throw new MyException("必须输入数字"); } catch (ArithmeticException et) { // 算术异常 throw new MyException("被除数不能为0"); } finally { System.out.println("finally块总会得到执行"); } } }【注意】(catch)捕捉的异常的范围一定要比抛出的异常范围大。
结束语:今天内容比较简单,所以写的不是很多。明天开始学习IO。