簡體   English   中英

這些構造函數調用語句之間的區別?

[英]Difference between these Constructor calling Statements?

public class StudentFormMain {  
    public static void main(String[] args) {
        new StudentForm();
    }
}

和二等艙

public class StudentForm extends JFrame {
    public StudentForm(){
        setTitle("Admission Form");
        setSize(300,250);
        setVisible(true);   
    }
}

我的問題是

這些語句之間有什么區別

StudentForm studentform=new StudentForm();

new StudentForm()

第一條語句聲明該類的Obj並調用構造函數,但在第二條語句中,僅構造函數正在調用。

注意:結果相同

super(""); set the title of the frame

因為它正在調用超類構造函數。 我們也可以使用setTitle("")方法設置標題

也請區分方法。

new StudentForm();

上面的變體僅調用構造函數。

StudentForm studentform=new StudentForm();

當您要訪問該類中的構造方法以外的其他方法時,可以使用上述變化形式。 在這兩種情況下,無論您是否使用studentform對象,都將調用構造函數。

例如,如果您的類具有另一個稱為methodOne()方法:

public class StudentForm extends JFrame {
    public StudentForm(){
        setTitle("Admission Form");
        setSize(300,250);
        setVisible(true);   
    }
    public void methodOne()
    {
         System.out.println("In method one..");
    }
}

然后可以使用以下命令調用它:

StudentForm studentform=new StudentForm();
studentform.methodOne();

new關鍵字表示StudentForm對象的instantiation/creation 所以

new StudentForm()

給您一個StudentForm實例或一個StudentForm對象。

之間的唯一區別

StudentForm studentform = new StudentForm();

and 

new StudentForm();

前者給您對新的StudentForm對象的reference 參考是studentForm

編碼:

StudentForm studentform = new StudentForm();

構造一個新的StudentForm實例,並將StudentForm實例的引用分配給可變的studentform 這樣您以后可以調用StudentForm實例的方法,例如studentform.addContainerListener(xxx)

但是代碼new StudentForm()只是調用構造函數來創建一個新的對象實例,但不保留對該實例的引用。

StudentForm studentform=new StudentForm();

您正在創建類型為StudentForm的對象,並將其分配給稱為Studentform的引用(使用camelCase,即,使用StudentForm代替字段的Studentform)。 現在,您可以使用studentForm調用對象的某些方法/訪問字段。

eg: studentForm.toString()

如果您沒有獲得對該對象的引用,則無法在該對象上計算非靜態方法。

您的第一條語句保存了創建實例的引用,第二條語句沒有創建對象的引用。 除此之外,沒有區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM