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不执行啊?

解决方案 »

  1.   

    因为fun()方法里的异常被捕获了,没有向main()抛出异常,
    异常被fun方法消化掉了,main函数没有察觉到
      

  2.   

    你在fun函数中,已经捕获了异常信息~~如果你还想继续让他上层处理这个异常,你应该把异常继续抛出。
    try{
       throw new NullPointerException();
    }catch(Exception e){
       System.out.println("第一个try块!");
       throw e;  // 把异常信息抛出
    }
      

  3.   

    在main方法中调用fun方法不会产生异常,所以也就没什么异常可以catch的了
      

  4.   

    fun里已经把异常捕获了,如果要main里也catch,就要在定义fun的时候再把异常抛出
      

  5.   

    main调用fun时。fun出错了,但是fun的异常被fun自己捕获了,所以fun里面的catch会执行,然后执行finally,因为fun并没有向外抛出异常,而是自己处理了。所以main没有得到错误信息,所以main的catch不会执行,直接执行finally
      

  6.   

    已经被捕获啦,除非fun方法throws Exception