1.关于异常的总结:
1.Throwable: Error (错误) 和 Exception(异常)的超类
Exception(异常) 是所有异常的超类
2.Exception:包括Exception 本身 、 和其他非运行时期异常、RuntimeException、
3.RuntimeException 无需throws声明、调用者也无需处理、一旦发生需要改代码
4.JVM 处理异常的方式:1.以红字形式将异常对象、异常信息、异常位置打印在控制台 2.终止程序
2.异常的产生及处理方式
1 public static void main(String[] args) { 2 int[] arr = { 1, 2 }; 3 4 try { 5 // 检测可能出现异常的语句 6 int i = get(arr); 7 System.out.println(i); 8 9 } catch (Exception e) { 10 // 捕获异常 11 // e.printStackTrace(); 12 System.out.println(e);// 打印异常类名和异常信息 13 14 } finally { 15 System.out.println("一定会被执行的语句"); 16 17 } 18 19 } 20 21 public static int get(int[] arr) throws Exception {// 告知调用者 22 if (arr == null) { 23 throw new Exception("数组为空"); 24 } 25 if (arr.length < 3) { 26 // 抛出一个指定的一个异常,显示声明 27 throw new Exception("传递数组长度必须大于3"); 28 } 29 int i = arr[2] + 1; 30 return i; 31 }
总结:1.如果是编译时期异常必须 throws 声明,要声明多个异常用逗号隔开;运行时期异常不用throws声明
2.多个catch捕获多个异常时要先捕获子类异常再捕获父类异常,且每个catch捕获的异常不能重复
3.可以使用try{}finally{}方式处理,只检测不处理,只为了关闭资源
4.两种异常的导致的原因区别:
编译时期异常:程序正确,但因为外在的环境条件不满足引发,比如方法的传参,方法本身需要判断参数的合法性而抛出异常
调用方法时需要处理异常,这并不是方法本身的逻辑错误;
运行时异常:说明程序本身存在bug,比如方法本身没有判断参数合法性而导致的空指针异常;