亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java - 當聲明全局變量并用值初始化時,對象創建時會發生什么?

Java - 當聲明全局變量并用值初始化時,對象創建時會發生什么?

瀟湘沐 2023-10-13 15:13:40
當全局變量被聲明并用值初始化時,在創建類的對象時,全局變量是否再次被初始化并獲得新的內存?class A{int a = 10;}a這將被存儲在帶有 value 的內存地址中10。但是當我創建A類的對象時,a會再次初始化嗎?class A{int a = 10;public static void main(String args[]){A a = new A();}
查看完整描述

3 回答

?
慕容708150

TA貢獻1831條經驗 獲得超4個贊

你所說的并不完全是內存分配的工作原理。


class A{


int a = 10;


}

在上面的示例中,您創建了一個類。類中的成員僅在創建其對象后才創建并分配其值,除非將成員聲明為靜態。因此,在您發布的第二個示例中,在構造 A 類的對象“a”之后,變量“a”被賦予值 10。如果你還是不明白,那么運行這段代碼:


class A{

int a = 10;

public static void main(String args[]){

A a = new A();

A b = new A();

b.a += 10;

System.out.println(a.a);

System.out.println(b.a);

}

}

如果變量 a 在創建對象之前被賦值,那么當對象 b 修改它時,打印的變量就會改變。但如果你運行這個,輸出將是:


10

20

這意味著變量僅在對象創建后才分配。我希望這能消除您的疑慮。還有另一個提示,靜態變量不能修改。


查看完整回答
反對 回復 2023-10-13
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

當全局變量被聲明并用值初始化時......

您所顯示的不是全局變量。Java 中不存在真正的全局變量。a是 的實例字段A。

這將被存儲在內存地址 a 中,值為 10。

a不是內存地址,它只是字段的名稱。您很少需要處理低級內容,例如 Java 中的內存地址。

但是當我創建A類的對象時,a會再次初始化嗎?

在創建實例之前,不會為該字段分配內存a,除非用于存儲已編譯的類文件本身。一旦創建了一個實例,A內存中就會有一個位置存儲與該實例的字段10相對應的值。a

請注意,如果您創建 的第二個實例A,則將分配另一塊內存來保存a該實例的 。


查看完整回答
反對 回復 2023-10-13
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

Java中沒有全局變量。有類變量和對象變量。類變量由關鍵字定義static。

在您的代碼中,該a變量是一個對象變量,每次創建該類的新對象時都會創建(并初始化)該變量,在本例中是通過調用new A().

如果您創建了 A 類的另一個對象,a則會為其創建(并初始化)另一個對象變量,這與第一個對象變量不同。


查看完整回答
反對 回復 2023-10-13
  • 3 回答
  • 0 關注
  • 150 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號