五个常见的异常:ArrayIndexOutofBoundsException、NullPointerException、ArithmeticException、ClassNotFoundException、IOException.
分享一个小例子:
public class Test1{
public static void main(String[] args){
try{
System.out.println("try 打印输出");
}finally{
System.out.println("finally 打印输出");
}
}
}
输出结果:try打印输出
finally打印输出
备注:这个没有什么好纠结的啦,finally最后无论是否异常肯定是要输出的啦。
public class Test2{
public static void main(String[] args){
int a=1;
int b=0;
int c;
try{
c=a/b;
}catch(ArithmeticException ae){
System.out.println("捕获整数为零异常");
}catch(Exception e){
System.out.println("捕获异常");
}finally{
System.out.println("finally 打印输出");
}
}
}
输出结果:捕获整数为零异常
finally打印输出
备注:当出现异常的时候,当有多个catch的时候,当捕获到异常之后,后面的catch不执行。当父类的catch(Exception e)在子类的catch(ArithmeticException ae)之前,则编译报错。
public class Test3{
public static void main(String[] args){
Test3 test =new Test3();
int index = test.Demo();
System.out.println(index);
}
public int Demo(){
try{
System.out.println("try 打印输出");
return 1;
}finally{
System.out.println("finally 打印输出");
//方案一不注释return 2; 方案二注释掉return 2;
return 2;
}
}
}
方案一输出结果:try 打印输出
finally 打印输出
2
方案二输出结果:try 打印输出
finally 打印输出
1
备注:方案一为什么会是输出2,结合方案一按结果往回推,在执行完finally之前try中是不可以被返回内容的的。