今天在做JDBC练习的时候,因为try catch语句用的比较多,发现了一个以前没有注意到的细节问题——try语句里面声明的变量,只能在对应的try语句内使用。
我把问题简化了一下,代码如下:
public class JdbcTest{
public void test(){
try{
Connection conn = JDBCUtils.getConnection();
}catch(Exception e){
e.printStackTrace();
}finally{
conn.close();
}
}
}
Connection conn
是在try语句块里,conn.close();
是在非try语句块里。此时编译出错:
如果把代码改为:
public class JdbcTest{
public void test(){
try{
Connection conn = JDBCUtils.getConnection();
conn.close();
}catch(Exception e){
e.printStackTrace();
}finally{
}
}
}
或
public class JdbcTest{
public void test(){
Connection conn = JDBCUtils.getConnection();
try{
}catch(Exception e){
e.printStackTrace();
}finally{
try{
conn.close();
}catch(SQLException e){
e.printStackTrace();
throw new RuntimeException(e);
}
}
}
}
则可以编译成功。
需要注意的是conn.close();
是必须要在try catch语句中的,不然会提示: