finally段肯定会执行,所以不合理如果
Class.forName(dbDriver);
都不成功,你还能尝试什么操作...

解决方案 »

  1.   

    不管怎样finally中的代码一定会执行,你说的理论上还可以,不过没试过,呵呵,你试试啊!
      

  2.   

    finally里面的是一定会执行的;
    catch的作用就是让你捕获异常然后采取相应的手段啊,比如在catch{}里面添加从新连接的语句;
    catch就是catch了,如果不是严重的错误,程序还是会执行下去的,所以要在catch子句里面添加相应的处理代码。比如可以弹出对话框什么的。出现异常并不一定是程序结束了
      

  3.   

    需要的话可以处理,比如数据操作try{
       //提交事务 
     }
    catch(Exception e){
       //回滚
    }
    finally{
      //释放相关资源
    }
      

  4.   

    但是我有一个疑问,比如说这个上面那个Driver加载错误,如果只是捕获一个异常信息的话,程序应该是不会再运行下去了吧。因为它根本没有把错误throw出去噢!————————————————
    我是楼主!
      

  5.   

    你理解有问题,既然捕获了,那就继续执行了比较一下下面2个:public static void g(){
      String s = null;
      s.length();  //will have NullpointerException
      
      System.out.println("not used");
    }

    public static void f(){

       try{
         String s=null;
         s.length();
       }
       catch(Exception e){
        System.out.println("in catch:"+e);
       }
       finally{
        System.out.println("in finally");
       }
       
       System.out.println("after finnaly");
       
    }
      

  6.   

    谢谢秦川(寒……让我想起了师妃喧)。
    我想我明白了,其实程序还会运行。不过只能运行到下次调用那个产生异常的那个东西的时候,比如你说的s.length(),如果再用到它,除非继续捕获异常,要不就不会再运行下去了,是吗?
      

  7.   

    不管有没有throw出去当在catch{}中对异常处理完毕以后,推出以前肯定会执行finally
    里面的代码啊,你可以试试上面kingfish提供的代码 就知道执行的过程了
      

  8.   

    ???
    如果没有捕获异常有没有throw程序不会运行了吧
    但是在程序推出之前finally里面的代码肯定是会执行的
      

  9.   

    我做了一个测试程序:
    public class Test 
    {
    public static void g(){
      String s = null;
      s.length();  //will have NullpointerException
      
      System.out.println("not used");
    }

    public static void f(){
     try{
         String s=null;
         s.length();
       }
       catch(Exception e){
        System.out.println("in catch:"+e);
       }
       finally{
        System.out.println("in finally");
       }
       
       System.out.println("after finnaly");
       
       }
    public static void main(String[] args)
    {
    Test.g();
    Test.f();
    }}
    运行结果如下:
    程序没有再运行下去噢。
    java.lang.NullPointerException
    at test.Test.g(Test.java:19)
    at test.Test.main(Test.java:42)
    Exception in thread "main"
      

  10.   

    对啊 ,呵呵,异常不捕获就不执行了一般,但捕获了就好了哪怕你catch了不做任何事
      

  11.   

    对于任何java方法,如果不能完成任务,都允许通过一条备用的退出通道退出其执行过程。但是并不是退出程序。
    比如这个程序,即使没有输入数字,捕捉到了NumberFormatException还是会继续执行下面的语句。
    import java.io.*;
    class test
    {
    public test()
    {
    try{
    System.out.println("Please enter a number:");
    BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
    int a = Integer.parseInt(b.readLine());
    }
    catch(IOException ex)
    {
    ex.printStackTrace();
    }
    catch(NumberFormatException e)
    {
    System.out.println("The Exception has been caught.");
    }
    System.out.println("After caught");
    }
    public static void main(String[] args)
    {
    new test();
    }
    }
      

  12.   

    但是对于此构造函数外的函数运行,它就无能为力了,它只是保证了此函数的运行而已。
    比如说下面的程序中hehe函数就不会运行了。
    import java.io.*;
    class Test
    {
    public Test()
    {
    try{
    System.out.println("Please enter a number:");
    BufferedReader b = new BufferedReader(new InputStreamReader(System.in));
    int a = Integer.parseInt(b.readLine());
    }
    catch(IOException ex)
    {
    ex.printStackTrace();
    }
    catch(NumberFormatException e)
    {
    System.out.println("The Exception has been caught.");
    }
    System.out.println("After caught");
    }

    public static void hehe()
    {
    System.out.println("hehe");
    }
    public static void main(String[] args)
    {
    new Test();
    Test.hehe();


    }
    }
      

  13.   

    看下面的语句,如果connection没有连接成功,即使捕获了异常,语句1按理说会运行,但是它是拿什么来运行呢?因为conn根本不存在。即使运行,又能运行出什么结果呢?try
    {
    Connection conn=DriverManger.getConnection();
    }
    catch(Exception e)
    {
    System.out.println(e.toString());
    }Statement stm=conn.createStatement();//语句1
      

  14.   

    然后jvm又会继续抛出异常,所以程序就会因为新抛出的异常没有被捕获而终止了啊。