1、Error:由虚拟机JVM引发的异常,是程序我发处理的错误。
2、 Exception:程序本身可以处理的异常。
3、异常处理总结:
- try块,异常捕获,如果没有catch块,必须跟一个finally块;
- catch块,用于处理try捕获的异常;
- finally块,无论是否捕获或者处理异常,finally块中的内容都会被执行。当try块或者catch块遇到return语句时,finally块语句将在方法返回之前执行。
4、一下几种情况,finally块将不会被执行
a.在finally语句块第一行发生异常;
package exception;
public class TryDemo {
public static void main(String[] args) {
int i = 19;
try{
i = i/0;
}catch (Exception e){
}finally {
i = i /0;//下面的打印不会执行
System.out.println("111111111");
}
}
}
b.在前面的代码中用了System.exit(int)已退出程序,exit是带参函数;若该语句在异常语句之后,finally会执行。
package exception;
public class TryDemo {
public static void main(String[] args) {
int i = 19;
try{
System.exit(1);//这行打印不执行,很好理解,程序没发生异常的时候就退出
i = i/0;
// System.exit(1);//在这行打印可以执行
}catch (Exception e){
}finally {
System.out.println("111111111");
}
}
}
c.程序所在的线程死锁;
d.关闭CPU。
5、一个需要特别注意的点:
当try语句和finally语句都有return语句的时候,在try块的方法返回之前,会去执行finally语句中的内容,并且try块的return将不被执行;
package exception;
public class TryDemo {
public static void main(String[] args) {
int i = find();
System.out.println(i);
}
private static int find(){
int i = 19;
try{
i = i/0;
System.out.println("111");//不执行
return i;//不执行
}catch (Exception e){
System.out.println("22222");//1、先执行
return 11;//2、在执行
}finally {
return 22;//3、最后执行
}
}
}