簡體   English   中英

對象什么時候初始化?

[英]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()時被初始化。

  • new Student() - 這會調用 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.

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