![](/img/trans.png)
[英]What is the difference between calling the thread.start() method in an constructor and a method
[英]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.