版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/84834997
对于异常的默认处理
结束程序执行,并输出异常信息( 异常堆栈信息e.printStackTrace() ),使用 try{}catch(){ } 当异常发生的时候,执行对异常的处理,程序会继续顺序执行。
在执行多个异常的捕获的时候
在异常捕获时,使用多态
在jdk7的新形式中,不能将异常的子类直接和exception进行相或处理,可以使用传统的多个catch块来进行处理
返回越小的异常类型应该尽可能的处于最上的位置;返回越大的异常类型应该处于后边的位置
package org.lanqiao.exception.demo;
public class ExceptionDemo1 {
public static void main(String[] args) {
int[] arr = {2,1,3,5,7};
int a = 10;
int b = 0;
System.out.println("除法运算开始");
try {
System.out.println(arr[2]);
System.out.println("除法运算的结果为:" + a/b);
}/*catch(ArithmeticException |ArrayIndexOutOfBoundsException e ) {
if(e instanceof ArrayIndexOutOfBoundsException) {
System.out.println("数组下标越界");
}else if(e instanceof ArithmeticException) {
System.out.println("除数不能为0");
}
}*/
catch(ArithmeticException e) {
System.out.println("除数不能为0");
}catch(ArrayIndexOutOfBoundsException e) {
System.out.println("数组下标越界");
}catch(Exception e) {
}
System.out.println("除法运算结束");
}
}
finally块
无论程序是否发生异常,都需要执行的代码。
- 在通过程序去链接数据库的时候,无论访问是否成功,都需要将链接释放掉
- 在IO操作中,最终都需将IO流关闭
当在 try{}catch(){}finally{} 结构中,如果 try 块 中存在 return语句,那么finally块还会执行吗?如果执行,实在return之前还是return之后呢?(面试题)
答:(没有异常发生)finally一定会执行,并且时在return之前执行。
(如果发生了异常) finally 一定会执行 但是return不会执行了
(当异常发生之后,发生异常的语句之后(在同一个try{}之内的)的语句都不会执行)
package org.lanqiao.exception.demo;
public class FinallyDemo {
public static void main(String[] args) {
int a = 10;
int b = 0;
int c = 0;
try {
c = a / b ;
}catch(ArithmeticException e) {
String message = e.getMessage();
System.out.println(message);
//e.printStackTrace();
/*
* java.lang.ArithmeticException: / by zero
at org.lanqiao.exception.demo.FinallyDemo.main(FinallyDemo.java:10)
*/
}
/*System.out.println(c);//标准输出流
System.err.println(c);//就是错误输出流
*/
}
}