Mình đã học về stack cũng như bộ nhớ C++ khá kĩ giờ đang học chuyển sang học java. Trong quá trình code về csdl thấy có vài điểm lạ trong stack của java.
Đoạn code của mình như sau:
file DB.java
Code:
import java.sql.*;
public class DB {
private String driver = "com.mysql.jdbc.Driver";
private String host = "jdbc:mysql://localhost";
private String dbName = "test";
private int port = 3306;
private String userDB = "root";
private String passDB = "macarong";
private Statement sta;
public DB() {
super();
}
public void connect() throws Exception {
Class.forName(driver);
String url = host + ":" + port + "/" + dbName;
Connection con = DriverManager.getConnection(url,userDB,passDB);
sta = con.createStatement();
}
public ResultSet execSQL(String query) throws Exception {
ResultSet res = sta.executeQuery(query);
return res != null ? res : null;
}
public int updateSQL(String sql) throws Exception {
int i = sta.executeUpdate(sql);
return i > 0 ? i : 0;
}
}
file mystack.java
Code:
import java.sql.*;
public class mystack {
/**
* @param args
*/
public static void main(String[] args) {
DB db = new DB();
try {
db.connect();
ResultSet rs = db.execSQL("select * from User");
while(rs.next()) {
System.out.print(rs.getString("Username") + "\t" + rs.getString("Email"));
}
} catch (Exception e) {
System.out.print("Loi he thong:" + e);
}
}
}
Chương trình ở trên chạy ngon lành nhưng mình lại ko hiểu tại sao vậy
Khi mình gọi hàm db.connect() thì nó thực hiện những gì trong phương thức connect(): biến "con" đc tạo ra rùi con.createStatement(); tạo ra 1 đối tượng kiểu Statement và sau đó biến sta tham chiếu tới nó. Cái mình thắc mắc ở đây là khi kết thúc phướng thức bình thường như trong C/C++ thì stack đó sẽ bị hủy , các biến đc khai báo bên trong method sẽ biến mất , còn đây tại sao stack ko bị hủy có phải là do thuộc tính "sta" tham chiếu tới 1 đối tượng ( 1 biến ) trong stack (vì trong java cách truyền tham số là class là truyền bằng pass by reference) nên khi kết thúc method stack ko bị hủy.
Một câu hỏi phụ nếu như ko có 1 đối tượng nào (1 biến của class ) bên ngoài tham chiếu tới 1 đối tượng trong stack thì stack có bị hủy ko