大家觉得的呢?

解决方案 »

  1.   

    不一定,如执行了finally前执行了System.exit(0);或者断电了
      

  2.   

    还有就是try里面死循环了,死锁了
      

  3.   


    1L说的是一种情况 所以还是要跟catch配合使用的看到书上人推荐的写法。。
    try{
        try{
        }finally{
        }
    }catch(Exception e){
    ....
    }
      

  4.   


    俺看到的时候就被雷到了 这样做就避免了在finally{}内出异常导致代码有点不简洁的小问题了 不过这样做据说在finally里出异常的话 就会丢失原来的异常 大概吧5L大亮!
      

  5.   

    finally与catch块的顺序从设计者的角度来说,是由其现实需要来创建的,所以楼上的这种写法,即便编译与运行都没有产生错误,也是不符合现实意义的,catch块总是捕获try块中的异常,而不论是否发生异常,都要执行finally块中的代码,除非finally块中再次出现异常——异常与中断就像是一对双胞胎,在出现一定级别高度的异常的地方,总是会产生中断,也就是说finally块中的异常同样会使程序产生中断执行,从这个意义上说,没有绝对完全执行finally块中所有代码的情况。
      

  6.   

    下次遇到这种问题,楼主记得自己写个小demo,跑跑,再改改,最后不明白再查书查网,就明白了。
      

  7.   


    有这种写法,常见于 JDBC 的代码中,但是这样的写法是有问题的!try {
        try {
            String sql = ...;
            con = ...;
            ps = con.preparedStatement(sql);
            rs = ps.executeQuery();
            while(rs.next()) {
                ...
            }
        } finally {
            if(rs != null) rs.close();
            if(ps != null) ps.close();
            if(con != null) con.close();
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }这是双重 try 的格式,对于上面的这段代码来说,这样的格式是有问题,不知道你能不能看出来?
      

  8.   

    最重要的可能没关。所以,我又要趁机推荐用commons库了
      

  9.   

    finally里的代码肯定会执行 除非你在比较极端的情况下如断电啊 什么的。
      

  10.   


    其实你写的那个方法应该在该问题的范围外 2L说的没实验过 可以说出异常的话finally会执行 但是出错误无法执行finally?
      

  11.   

    不一定会被执行,正如前面有位仁兄说的,在try中或catch中执行了system.exit(0);或者断电了
      

  12.   

    public static boolean decision() { 
         try { 
            return true; 
        } finally { 
          return false; 
        } 

    可以试下这个方法,finally是一定会执行的(断电,强制关闭除外)
      

  13.   

    不像是C#,有的时候不会执行  java几乎都执行的 不用担心这个
      

  14.   

    如果是SCJP考试的话,就选会执行。如果不是考试,就有System.exit(0);和断电的情况了。
      

  15.   

    不一定会被执行,正如前面有位仁兄说的,在try中或catch中执行了system.exit(0);或者断电了就不会执行了!
      

  16.   

    如果finally语句块没有跑出新的异常,而且你有没关机,又没断电,那一定会执行的
      

  17.   

    一般情况下会的。
      不妨看一下这个http://www.newsmth.net/pc/pccon.php?id=10003032&nid=408338(详细讲解哦)
      

  18.   

    递归不是在同一个进程中完成的,所以代码中的catch是抓不到这个异常的,所以不会打印出“catch”。
    现在发生的异常是java.lang.StackOverflowError。
    发生异常时,自动调用了finally,所以打印出了“finally”。可以这么修改代码,就可以看到异常了。class A {
    public void foo() {
    try {
    System.out.println("try");
    foo();
    } catch (OutOfMemoryError e) {
    System.out.println("catch");
    foo();
    } finally {
    System.out.println("finally"); }
    }
    }输出结果:
    finally
    finally
    finally
    Exception in thread "main" java.lang.StackOverflowError
    at sun.nio.cs.ext.DoubleByteEncoder.encodeArrayLoop(Unknown Source)
    at sun.nio.cs.ext.DoubleByteEncoder.encodeLoop(Unknown Source)
    at java.nio.charset.CharsetEncoder.encode(Unknown Source)