[英]When exacty is the object initialized?
我想問你一個對象初始化的確切時刻是什么時候
例如,我有這個簡單的 Java 代碼:
public class Test {
public static void main(String args[]) {
Student student = new Student();
student.setName("John");
student.setId(123);
}
}
那么student對象究竟是什么時候初始化的呢? 是否在執行new Student()
時初始化? 或者當Student student = new Student()
被執行時? 還是在執行 setter 之后? 任何反饋將不勝感激!
它在 new + 構造函數被調用時被初始化。
正如文檔所述
這些陳述中的每一個都包含三個部分(在下面詳細討論):
聲明:粗體代碼集都是將變量名與對象類型相關聯的變量聲明。
實例化: new 關鍵字是創建對象的 Java 運算符。
初始化: new 運算符之后是對構造函數的調用,該構造函數初始化新對象。
是否在執行
new Student()
時初始化?
是的。 當返回結果對象時,它已被初始化(由構造函數代碼)。
還是在執行 setter 之后?
對象的字段在構造函數返回時初始化。 它們可能被設置為null
或""
或0
或類似的值,但它們是用某個值初始化的。
如果Student
對象對於這些字段具有null
或任何其他內容是null
,那么構造函數應該接受它們的值作為參數,或者該類應該公開用於構建實例的構建器樣式的接口,以便到您有一個Student
實例,你知道這些字段用有意義的值填充。 是否有必要是特定於域的。
這取決於您的構造函數類。 可能是第 3 行,但是如果您的 mutator 方法創建了新對象,那么第 4 行和第 5 行。
它在執行new Student()時被初始化。
之后,將生成的對象分配給數據類型為Student的“ student ”變量。
每當調用' new '關鍵字時,對象都會被實例化並調用構造函數,從而導致對象初始化。
首先,看看setter 和constructor 之間的區別以及它們的優缺點。
構造函數:
1) 創建對象時調用構造函數。
2) 每個對象只調用一次。
3) 您可以使用構造函數在實例化點設置值。
4) 它不允許任何返回類型。
5) 隱式調用構造函數。
二傳手:
1)在對象初始化后調用setter來改變對象的值。
2) 一個 setter 可以被調用任意次。
3) 您可以使用 setter 在實例化點之后設置值。
4) 它允許返回類型。
5) 顯式調用 setter。
結論:
1) 對象在執行 new Student() 時被初始化
2) 如果您認為初始化是強制性的,並且在使用對象之前擁有所需的值,請使用構造函數。
3)當變量的初始化是非強制的並且你沒有對象初始化時的值時,使用setter方法。
4) 一般來說,我們應該避免使用 setter,因為它在某種程度上違反了封裝原則。
學生學生=新學生();
當您調用 new 然后調用構造函數時,您正在創建與構造函數類相同類型的對象,接收 new + 構造函數的對象必須是相同的類型。
另一個例子:
必須與您的類相同的對象 + 對象的名稱信號 = then new 加構造函數;
Example exaple = new Example();
你打電話時
Student student = new Student();
您正在內存中創建一個對象。 創建后,您可以使用對象的方法,例如 getter 和 setter。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.