请问一下java连接数据库要用finally时候声明要放try前面是怎么

请问一下就是我用finally里面写关闭数据库的代码,我就要把我前面的声明放在try前面不然会报错,别人说是作用域问题,我似懂非懂,希望有朋友能详细给我解释一下,谢谢。不胜感激。

try、catch、fanally不是共用作用域的,也就是说在try里面声名的变量只在try里面有效,在try结束后就释放掉了。
所以如果想要在finally里面使用该变量,变量的声名就要放在try、catch的外面。这和连接数据库无关,只是变量的作用域问题。

Connection conn;//情况一:声明在try外面
try{
//作用域1
Connection conn;//情况二:声明在try里面
}catch(Exception e){
//作用域2
}finally{
//作用域3
}

情况一:声明在try外面,其作用域包含作用域三,能在作用域3中引用
情况二:声明在try里面,只能在作用域1中引用,不能再作用域3中引用

在写try catch的时候,后面不是跟上大括号嘛,每一个大括号都是一个作用域

你在try的作用域里定义的局部变量,在finally里肯定访问不了,所以你同事说的是正确的。
解决方法,扩大局部变量的作用域即可,即:在try前面定义

不是,Java语法规定为try{}catch(){}finally{} ,catch分支不是必须的,但是必须有try-finally。

try{}catch(){}是一般用来捕捉代码块异常的,finally{}里面的代码块是异常发不发生都会执行,一般用来释放资源时候使用,
如果单纯的捕捉异常,finally可以不写,变量定义尽量在try{}catch(){}外面。

java同一个方法的规则是大括号里面的代码可以使用大括号外面定义的变量,因为try,catch,finally三对大括号都是平级的,而你如果把Connection,PreparedStatement,ResultSet定义在try里面,那它定义的位置就不是在finally的大括号外面,那就使用不到这三个对象了,没有对象调用方法是会报错的。