簡體   English   中英

Java中實例變量的初始化

[英]Initialization of Instance Variables in Java

當我們提供了自己的默認構造函數並且沒有在其中初始化 id 時,實例變量 id 如何初始化為 0? output變成了id:0 status:B id 0怎么來的?

`class Demo{
    private int id;
    private char status; 

    public Demo(){ 
    status = 'B';
    }

    public void display(){
    System.out.println("Id:="+id+" Status:"+status);
    }

    public static void main(String args[]){
    Demo ob = new Demo();
    ob.display();
    }
}`

以下是默認初始化

下表總結了上述數據類型的默認值。

Data Type              |  Default Value (for fields)
-----------------------+-----------------------------
byte                   |   0
short                  |   0
int                    |   0
long                   |   0L
float                  |   0.0f
double                 |   0.0d
char                   |   '\u0000'
String (or any object) |   null
boolean                |   false

在Java中,每個未初始化的變量都會自動初始化為聲明的類型的默認值,即:

  • 浮點數:0.0f
  • int / short / byte:0
  • 長:0L
  • 對象:null
  • 布爾值:false

基本類型默認為某些值。 對於int為0。

TL;DR - 實例變量有默認值。 見[1]。


您對 state 的值是零,或者更確切地說是 0 是正確的。這是因為在 Java 中,實例變量是駐留在 class 中的變量,但不是方法,不必手動初始化。

在 Java 中,當聲明實例變量時,如果沒有給出值,編譯器將應用默認值以允許程序運行。 雖然這可以在您可能希望稍后更改實例變量的值的情況下使用,但它通常被認為是不好的做法。

請參閱此處,Java 文檔:

默認值

聲明字段時並不總是需要賦值。 已聲明但未初始化的字段將由編譯器設置為合理的默認值。 一般來說,此默認值將為零或 null,具體取決於數據類型。 然而,依賴於這樣的默認值通常被認為是糟糕的編程風格。

有關每個數據類型的默認值的信息,請參閱 [1]。

該文檔包含有關其他變量的更多信息,即本地:

局部變量略有不同; 編譯器永遠不會為未初始化的局部變量分配默認值。 如果您不能在聲明局部變量的地方對其進行初始化,請確保在嘗試使用它之前為其分配一個值。 訪問未初始化的局部變量將導致編譯時錯誤。

局部變量和實例變量之間的差異(在 JVM 處理它們的方式上)的原因是實例變量被加載到稱為“堆”[2] 的 memory 區域,而局部變量是加載到一個單獨的 memory 區域,稱為“堆棧”[2]; 盡管現在也有例外 [3]。 堆存儲對象和對對象的引用,因此,實例變量與其對象一起存儲。 最終,做出了一個相當隨意的選擇,它強制初始化局部變量,而不是實例變量。

[1] https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

[2] https://www.guru99.com/java-stack-heap.html

[3] 為什么實例變量在java中有默認值?

實例變量使用默認值初始化,整數則為0。

id是基本類型int ,默認值為0

你在想物體

實際上是對對象的引用,它們默認為null ,表示它們不指向任何對象。

  • 因為int類型的默認值為0
  • 所有實例變量都分配有默認值

http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

聲明字段時,不一定總是需要分配值。 編譯器會將已聲明但未初始化的字段設置為合理的默認值。 通常,此默認值將為零或null,具體取決於數據類型。 但是,通常認為依賴於此類默認值是不好的編程風格。

下表總結了上述數據類型的默認值。

+------------------------+----------------------------+
| Data Type              | Default Value (for fields) |
+------------------------+----------------------------+
| byte                   |               0            |
| short                  |               0            |
| int                    |               0            |
| long                   |              0L            |
| float                  |            0.0f            |
| double                 |            0.0d            |
| char                   |        '\u0000'            |
| String (or any object) |            null            |
| boolean                |           false            |
+------------------------+----------------------------+

“對於int類型,默認值為零,即0”。
您可以在語言規范中看到默認值: http : //docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#96595

根據您的代碼,id是一個實例變量,如果未定義實例變量,則它將使用默認值。 在您的情況下,由於id為int,因此值為0

暫無
暫無

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

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