假设有如下两种代码段
 java.sql.Connection con = DriverManager.getConnection("省略");//取得数据库连接
代码段一:
try{
  ......
}catch(SQLException e){
  e.printStackTrace();
}finally{
  con.close();//关闭数据库连接
}代码段二
try{
  ......
}catch(SQLException e){
  e.printStackTrace();
}
  
con.close();//关闭数据库连接
我的问题如下:
1,上面两不同的代码段就是一个有finally,一个没有finally,试问在try中发生SQLException异常后,代码段二的数据库连接是否会关闭?为什么?2,当try中发生异常后,并且找到catch处理块,当catch处理块中的代码执行完后,然后程序会继续执行catch后面的代码吗?

解决方案 »

  1.   

    我再问一个,如果在catch中处理完了异常
    如输入除数为0,那么怎么让他返回继续执行发生异常的下一个语句啊????
      

  2.   

    如果在调试状态下!代码二是不会关闭数据库的,因为在调试的时候,一旦发生异常,将终止程序的执行。数据库不会关闭,而在执行状态下,数据库会得到关闭!
    同理,只有代码一CATHCH语句后在的语句一定会执行,而代码二后面的语句只有在执行状态下,会得到执行!
      

  3.   

    if(con!=null) con.close();try{
     //A
    }
    catch(){
    //B        
    }
    finally{
     //C       //一定会执行 
    }
    //D        //如果C里面有异常或者有return, D不会执行; 否则D会执行
      

  4.   

    catch捕捉到运行时异常后,程序是不是会在执行catch代码块后,程序中断,而如果捕捉到是非运行时异常,则程序会执行catch块里面的代码,进而继续执行catch后面的代码?
      

  5.   

    不是,只要catch了异常(并且catch里没有return),catch后代码就会执行。