日期:2014-05-20  浏览次数:20765 次

面试时遇到的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说明程序有异常了~