什么情况下必须用finally? 请举个简单的例子吧?

解决方案 »

  1.   

    IO操作`等
    finally 是必须执行的!除退出JVM
      

  2.   

    finally  必须执行其实说的不算准确哈````你这样理解吧``无论是否有异常都执行finally体中的程序`
      

  3.   

    finally用在不论是否发生异常,也不论发生任何异常,你都要执行某个操作时使用。比如资源的释放:SomeResource res = allocateMyResource(); // 申请得到某个资源
    try {
      Object result = res.doSomething(); // 利用资源做某些操作,可能发生异常
      return result; // 返回结果
    }
    catch (SomeException ex) {
      // 处理异常
    }
    finally {
      releaseMyResource(res); // 无论是否发生异常,资源都应该被释放
    }
      

  4.   


    try {
      int i = 2/0;
      int k = 10;
    } catch (ArithmeticException e) { }
      System.out.println("ttt");
    try {
      int i = 2/0;
      int k = 10;
    } catch (ArithmeticException e) { }
    finally { System.out.println("ttt");}
    那么这两段代码有什么不同?无论用或不用finally,都会打印ttt,那么finally到底有什么用处?
      

  5.   

    SomeResource res = allocateMyResource(); // 申请得到某个资源 
    try { Object result = res.doSomething(); // 利用资源做某些操作,可能发生异常  
    return result; // 返回结果 
    } catch (SomeException ex) { // 处理异常 
    }  releaseMyResource(res); // 无论是否发生异常,资源都应该被释放 不写finally不是一样的么?
      

  6.   


            public static void main(String[] args) throws Exception {
    try {
    int a = 2/0;
    } catch (Exception e) {
    throw (new Exception());
    }
    System.out.println("123");
    }
    这样就不打印了.
      

  7.   

    finally 使代码总会执行,而不管有无异常发生。使用 finally 可以维护对象的内部状态,并可以清理非内存资源。 
      

  8.   

    SomeResource res = allocateMyResource(); // 申请得到某个资源 
    try { Object result = res.doSomething(); // 利用资源做某些操作,可能发生异常  
    return result; // 返回结果 
    } catch (SomeException ex) { // 处理异常 
    }  releaseMyResource(res); // 无论是否发生异常,资源都应该被释放 不写finally不是一样的么?
    ------------问题1:return前没释放资源
    问题2:处理异常时如果出现新异常,也造成资源未释放
      

  9.   

    比如,使用 finally 关键字来避免资源漏洞
    finally 块确保 close 方法总被执行,而不管 try 块内是否发出异常。因此,可以确保在退出该方法之前总会调用 close 方法。这样您就可以确信套接字被关闭并且您没有泄漏资源。在此方法中不需要再有一个 catch 块。在第一个示例中提供 catch 块只是为了关闭套接字,现在这是通过 finally 关闭的。如果您确实提供了一个 catch 块,则 finally 块中的代码在 catch 块完成以后执行。finally 块必须与 try 或 try/catch 块配合使用。此外,不可能退出 try 块而不执行其 finally 块。如果 finally 块存在,则它总会执行。(无论从那点看,这个陈述都是正确的。有一种方法可以退出 try 块而不执行 finally 块。如果代码在 try 内部执行一条 System.exit(0); 语句,则应用程序终止而不会执行 finally 执行。另一方面,如果您在 try 块执行期间拨掉电源,finally 也不会执行。)
      

  10.   

    不关异常发不发生,都要执行某个任务或代码,就把那个代码防在finally里
      

  11.   

    是的,我们基本上在使用 IO 流或者 JDBC 的 close() 时采用 finally 块,
    以保证流和数据库资源什么的,哪怕在产生异常时都能关闭。
      

  12.   

    I/O流中经常配合try{}catch(){}使用!
    JDBC中也使用的比较多!
      

  13.   

    finally是不管捕获异常与否,都要去执行的,lz想想自己什么语句必须要执行呗
      

  14.   

    1.网上看的。try里有system.exit(0);
    2.自己在thinking in java (4edition p664)里看的。后台线程不执行fanally语句就会终止run方法。