Java方法实例化

时间:2015-07-15 06:19:01

标签: java

我有一个关于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();
}

2 个答案:

答案 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
    }
});
}