对Java中变量作用域理解

时间:2022-01-10 06:07:41

    昨天写一个java小程序测试与oracle数据库的连接,小程序如下:

package com.test;import java.sql.*;
public class procedure {
public static void main(String[] args) {

try {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection ct=DriverManager.getConnection
("jdbc:oracle:thin:@10.8.2.73:1521:orcl","scott","123456");
CallableStatement cs=ct.prepareCall("{call pro_book(?,?,?)}");
cs.setInt(1, 10);
cs.setString(2, "华尔街之狼");
cs.setString(3, "中信出版社");
cs.execute();
cs.close();
ct.close();

  
catch (ClassNotFoundException e) {

e.printStackTrace();

catch (SQLException e) {

e.printStackTrace();
}

}

}

    变量cs和ct在try{}之外就无法使用,当时就懵了,首先想到的就是超出作用域了,查过资料之后发现确实是超出作用域了,ct和cs的声明都是在try{}里面进行的,作用局就是在{}之内,把ct和cs的声明放在try{}之外就可以使用了。总结:变量的作用域开始于“{”,结束于“}”。修改之后的代码为:

package com.test;import java.sql.*;public class procedure {public static void main(String[] args) {Connection ct=null;CallableStatement cs=null;try {Class.forName("oracle.jdbc.driver.OracleDriver");ct=DriverManager.getConnection("jdbc:oracle:thin:@10.8.2.73:1521:orcl","scott","58764899");cs=ct.prepareCall("{call pro_book(?,?,?)}");cs.setInt(1, 10);cs.setString(2, "华尔街之狼");cs.setString(3, "中信出版社");cs.execute();}   catch (ClassNotFoundException e) {e.printStackTrace();} catch (SQLException e) {e.printStackTrace();}finally{try {cs.close();ct.close();} catch (SQLException e) {e.printStackTrace();}}}}


本文出自 “飞鱼技术” 博客,请务必保留此出处http://flyingfish.blog.51cto.com/9580339/1584436