要执行!即便try 语句不产生异常。
public class test{
  public static void main(String[] args){
    System.out.println("0");
    try{
      System.out.println("1");
    }
    catch(Exception e)
    {
      System.out.println("2");
    }
    finally{
      System.out.println("3");
    }
  }
}
结果为
0
1
3

解决方案 »

  1.   

    是的
    Thinking in java书中如是说:
    用finally清除
    无论一个违例是否在try块中发生,我们经常都想执行一些特定的代码。对一些特定的操作,经常都会遇到这种情况,但在恢复内存时一般都不需要(因为垃圾收集器会自动照料一切)。为达到这个目的,可在所有违例控制器的末尾使用一个finally从句(注释④)。所以完整的违例控制小节象下面这个样子:try {
    // 要保卫的区域:
    // 可能“掷”出A,B,或C的危险情况
    } catch (A a1) {
    // 控制器 A
    } catch (B b1) {
    // 控制器 B
    } catch (C c1) {
    // 控制器 C
    } finally {
    // 每次都会发生的情况
    }④:C++违例控制未提供finally从句,因为它依赖构建器来达到这种清除效果。为演示finally从句,请试验下面这个程序://: FinallyWorks.java
    // The finally clause is always executedpublic class FinallyWorks {
      static int count = 0;
      public static void main(String[] args) {
        while(true) {
          try {
            // post-increment is zero first time:
            if(count++ == 0)
              throw new Exception();
            System.out.println("No exception");
          } catch(Exception e) {
            System.out.println("Exception thrown");
          } finally {
            System.out.println("in finally clause");
            if(count == 2) break; // out of "while"
          }
        }
      }
    } ///:~通过该程序,我们亦可知道如何应付Java违例(类似C++的违例)不允许我们恢复至违例产生地方的这一事实。若将自己的try块置入一个循环内,就可建立一个条件,它必须在继续程序之前满足。亦可添加一个static计数器或者另一些设备,允许循环在放弃以前尝试数种不同的方法。这样一来,我们的程序可以变得更加“健壮”。
    输出如下:Exception thrown
    in finally clause
    No exception
    in finally clause无论是否“掷”出一个违例,finally从句都会执行。
      

  2.   

    一般用来处理一些无用的对象,释放资源
    无论try代码执行是否有异常
      

  3.   

    try catch finally 是一个完整的异常处理,try 扑佐异常,catch处理异常,而finally是无论是否发生异常,都要执行的代码,可以在他的里面写一些关闭数据库连接,之类的释放资源的语句或是写些无论是否发生异常,都要执行的语句。
      

  4.   

    alphazhao(绿色咖啡) 说的很全,考下来试一下
      

  5.   

    那为什么
    public class throwsException1
    {
      public static void main(String args[])
      {
         try
         {
           Method(0);
           Method(1);
         }
         catch(NumberFormatException e)
         {  System.out.println("\t捕获异常:"+e);}
         catch(ArrayIndexOutOfBoundsException e)
         {  System.out.println("\t捕获异常:"+e);}
         finally
         {  System.out.println("finally 块总是被执行。"); }
       }
      static void Method(int i)
      {
         System.out.println("调用方法Method("+i+")");
         if(i==0)
         {
             System.out.println("\t没有异常.");
             return;
         }
         else if(i==1)
         {
            String str="xyz";
            int c;
            c=Integer.parseInt(str);
         }
       }
    }
    运行的结果是:
    调用方法Method(0)
    没有异常
    调用方法Method(1)
    捕获异常:java.lang.NumberFormatException :xyz
    finally 块总是被执行而不是
    调用方法Method(0)
    没有异常
    finally 块总是被执行
    调用方法Method(1)
    捕获异常:java.lang.NumberFormatException :xyz
    finally 块总是被执行
      

  6.   

    因为
       try{
          }
      
    还没执行完呀,执行完try块才执行finally
      

  7.   

    //执行的。//测试代码:
    //TryCatchFinally.java
    public class TryCatchFinally
    {
      public static void main(String args[])
      {
        Method(0);
        Method(1);
        Method(2);
      }  static vod Method(int a)
      {
        System.out.println("调用方法 Method("+a+")");
        try
         {
           if(a==0)
           {
             System.out.println("\t没有异常产生,正常退出。");
             return;
           }
           else if(a==1)
           {
             int i=0;
             int j=4/i;
           }
           else if(a==2)
           {
             int iArray[]=new int[4];
             iArray[4]=3;
           }
        }    catch(ArithmeticException e)
        {
           System.out.println("\t捕获异常: "+e);
        }
        catch(ArrayIndexOutOfBoundsException e)
        {
           System.out.println("\t捕获异常: "+e.getMessage());
        }
        catch(Exception e)
        {
           System.out.println("\t产生的异常已被处理,该catch块不会被执行。");
        }
        finally
        {
           System.out.println("\tfinally块总是被执行。");
        }
      }
    }//结果输出:
    /*
    调用方法Method(0)
        没有异常产生,正常退出。
        finally块总是被执行。
    调用方法Method(1)
        捕获异常:java.lang.ArithmeticException:/by zero
        finally块总是被执行。
    调用方法Method(2)
        捕获异常:null
        finally块总是被执行。
    *///摘自《Java程序设计》:人民邮电出版社
      

  8.   

    TO:gscool(炮灰)因为这里只有一个
    try
    ……
    catch
    ……
    finally
    ……
    而且只出现一个异常。
    而我的上例中是3个
    try……catch……finally……
    2个异常