看到很多人代码是这样写的,先把 对象=null,然后在new,这个和直接new有什么区别,
比如一个user 表,
特别是在数据库的操作中,一般都是:
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
conn =DriverManager.getConnection();
pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
rs=pstmt.executeQuery();
如果我直接使用
Connection conn =DriverManager.getConnection();
PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
ResultSet rs=pstmt.executeQuery();
有什么区别?是为了更好看吗?还是和虚拟机有关系,请高手多指点。
比如一个user 表,
特别是在数据库的操作中,一般都是:
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
conn =DriverManager.getConnection();
pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
rs=pstmt.executeQuery();
如果我直接使用
Connection conn =DriverManager.getConnection();
PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
ResultSet rs=pstmt.executeQuery();
有什么区别?是为了更好看吗?还是和虚拟机有关系,请高手多指点。
PreparedStatement pstmt = null;
ResultSet rs = null;
conn =DriverManager.getConnection();
pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
rs=pstmt.executeQuery();
这样写是为了可以在多个方法中可以调用conn,pstmt,rs。
Connection conn =DriverManager.getConnection();
PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
ResultSet rs=pstmt.executeQuery();
这样写,有局限性
比如你在某个方法一开始的时候定义一个String类型的变量,然后在某个条件判断里进行赋值,但你在条件判断外使用的时候,他就会提示你要初始化,所以一般都会默认为一个null
2.还有一个就是要考虑到变量的作用范围。如:
try {
Connection conn =DriverManager.getConnection();
PreparedStatement pstmt=conn.prepareStatement("select *from user where username=?");
pstmt.setString(1, username);
ResultSet rs=pstmt.executeQuery();
} carch(...) {
} finally { // 如果这样写的话,此处将无法使用下面的语句
if (conn != null) {
conn.close();
}
}
static String s=null
void MthodA(){
s="abc";
}
String MthodB(){
s="xyz";
}
这里分开来的写法就非常有用了,我们可以一目了然的看出两个方法中用的是同一个静态成员变量,
但是如果在
MethodA(){
String s="abc"; //这里的s只能视为局部变量了,而不是成员变量
}
这时候再来看
String MthodB(){
s="xyz"; //这里的代码就要报错了,因为它在类的全局里并没有定义.
}
成员变量跟局部变量主要是用 来分别堆栈区里的分别,要搞清楚原理还必须要了解一下堆栈区
祝你好运.
Connection conn = null;
方便初始化,方便后面调用,可以重复使用,可以设为全局变量
简单的说就是你给Connection 起了一个名字