簡體   English   中英

是否有默認的構造函數,即使我在課堂上提到了構造函數

[英]is there default constructor even if i mention constructor in class

public class Ex
{ 
  int a;   

  public Ex()   
  {
    System.out.println("a is "+a);   
  } 
}

輸出為:a為0

初始化的地方...

我知道int的默認值為零..我的問題是它是通過默認構造函數初始化的。(我聽說當我們在類中沒有提到任何構造函數時會創建默認構造函數)

不,當您編寫特定的on時,沒有默認的構造函數。 但是,在調用任何構造函數之前,必須先初始化字段。 字段初始化后,將運行初始化程序({.. some code ..}塊),並最終執行構造函數。

a具有初始值的原因寫在Java語言規范(4.12.5)中

每個類變量,實例變量或數組組件在創建時均使用默認值初始化

a是實例變量(非靜態字段),因此具有初始值。 值本身也被指定:

對於int類型,默認值為零,即0。

知道局部變量(在方法主體中聲明的變量)有所不同可能很有趣:

在使用局部變量之前,必須通過初始化或賦值為局部變量顯式地賦予一個值,這種方式可以由編譯器使用確定賦值規則進行驗證。

因此,如果您讀取的局部變量尚未在代碼中初始化或“設置”,則編譯器將給出錯誤消息。

為了澄清您的想法,如果您沒有聲明零參數構造函數,並且您的類沒有構造函數,則Java為您創建一個默認的零參數構造函數。

對於原始類型,一旦聲明,則在使用前使用默認值對其進行初始化(如果未初始化)。

§JLS-8.8.9默認構造函數

如果沒有,則在代碼中提供了構造函數。

如果一個類不包含構造函數 聲明,則將自動提供一個不帶參數的默認構造函數:如果所聲明的類是原始類Object,則默認構造函數的主體為空。 否則,默認構造函數不使用任何參數,而僅調用不帶參數的超類構造函數

在調用構造函數之前初始化基元

當Java為類分配內存時,會發生這種情況。 它將使用默認值過濾所有字段;

暫無
暫無

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

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