我有一个关于Java方法实例化的问题。这是:
有什么区别:
new className().methodName();
和
className reference = new className();
reference.methodName()
因为在以下代码中:
public doc() {
initComponents();
//dData();
}
public void dData(){
try{
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
String sql = "SELECT doctorBusiness.id, doctorBusiness.doctorname, doctorBusiness.patientName, doctorBusiness.xComm, doctorBusiness.labComm, doctorBusiness.ecgComm, doctorBusiness.spcComm, doctorBusiness.dateofreport, doctorBusiness.totalEarnt FROM doctorBusiness";
conn = DriverManager.getConnection("jdbc:ucanaccess://test.accdb");
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
jXTable1.setModel(DbUtils.resultSetToTableModel(rs));
}
catch(Exception e){
JOptionPane.showMessageDialog(null, "Error in fetching data\n"+e);
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new doc().setVisible(true);
new doc().dData(); // <-------- Facing problem here
}
});
}
我是new doc().dData();
还是使用doc d = new doc();
d.dData();
正确实例化参考,
它没有调用该方法。
而在构造函数内部调用总是调用方法,如下所示:
public doc() {
initComponents();
dData();
}
答案 0 :(得分:9)
只需创建两个doc
实例new doc().setVisible(true);
new doc().dData();
下面的代码会创建一个单独的实例并多次使用它
doc d=new doc();
d.setVisible(true);
d.dData();
创建一个实例并按正确的顺序调用它的方法,或者你可以在第一个方法的末尾调用其他方法。这取决于你的要求。如果您有需要仅运行第一种方法的情况。然后第二种方法将是最糟糕的。
答案 1 :(得分:3)
new className()。methodName();
它创建一个新对象并调用它methodName
并在Java堆中浮动。您不能再使用同一个对象,因为它没有在任何参考文献中捕获它。
className reference = new className();
reference.methodName()
这次您的对象引用被捕获到reference
变量中,使用reference
可以在任意时间使用此对象。
...
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new doc().setVisible(true);
new doc().dData(); // <-------- Facing problem here
}
});
}
此处,setVisible
在不同的对象上被调用&amp;在另一个无名对象上调用dData
,这两个方法调用都在不同的对象上。
相反,您应该使用相同的对象
...
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
doc obj = new doc();
obj.setVisible(true);
obj.dData(); // <-------- This would work fine
}
});
}