面试时遇到的try catch finally问题
public class test2 {
static void fun(){
try{
throw new
NullPointerException();
}catch(Exception e){
System.out.println("第一个try块!");
}finally{
System.out.println("第一个finally!");
}
}
public static void main(String[] argv){
try{
fun();
}catch(Exception e){
System.out.println("第二个try块!");
}finally{
System.out.println("第二个finally!");
}
}
}
运行结果为:
第一个try块!
第一个finally!
第二个finally!
为什么主方法里的catch不执行啊?
!
------解决方案--------------------饿...主方法里面又没抛出异常不会没捕获为什么要输出呢?子类已经捕获了饿.
------解决方案--------------------说错...fun里面已经捕获了..
------解决方案--------------------你在fun函数中,已经捕获了异常信息~~如果你还想继续让他上层处理这个异常,你应该把异常继续抛出。
try{
throw new NullPointerException();
}catch(Exception e){
System.out.println("第一个try块!");
throw e; // 把异常信息抛出
}
------解决方案--------------------在main方法中调用fun方法不会产生异常,所以也就没什么异常可以catch的了
------解决方案--------------------fun里已经把
异常捕获了,如果要main里也catch,就要在定义fun的时候再把
异常抛出
------解决方案--------------------main调用fun时。fun出错了,但是fun的异常被fun自己捕获了,所以fun里面的catch会执行,然后执行finally,因为fun并没有向外抛出异常,而是自己处理了。所以main没有得到错误信息,所以main的catch不会执行,直接执行finally
------解决方案--------------------已经被捕获啦,除非fun方法throws Exception
------解决方案--------------------楼上已经出得很多了,
------解决方案--------------------7楼说的够详细了
------解决方案--------------------在fun()里已经被catch了
------解决方案--------------------出现异常就会执行
------解决方案--------------------都回答了,俺来拿分
------解决方案--------------------catch说明程序有异常了~