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

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

Java static 變量聲明、初始化順序問題

Java static 變量聲明、初始化順序問題

慕桂英546537 2019-02-24 03:09:32
以下這段代碼會在static塊中報錯: public class Test { static { a = a + 1; } static int a = 10; } 上面這段代碼在編譯階段即會報錯,按照這篇文章(樓主先假設該博主的文章是對的)的描述,首先, static int a = 10; 會被優化成 static int a; static { a = 10; } 既然如此,那么就是說 a = a + 1; 問題1:上面這句在執行前,a已經聲明過了,那為什么還會出錯呢? 問題2:為什么 a = a + 1; 這句改成 a = 11; 這樣的賦值語句就沒問題了呢?注:問題1即為上面文章中底部留言中的問題
查看完整描述

1 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

建議參考《深入理解Java虛擬機》第七章 7.3.5節 (second edition)。

<clinit>()方法是由編譯器自動收集類中的所有類變量的賦值動作和靜態語句塊中的語句合并產生的,編譯器收集的順序是由語句在源文件中出現的順序決定的,靜態語句塊中只能訪問到定義在靜態語句塊之前的變量,定義在它之后的變量,在前面的靜態語句塊可以賦值,但是不能訪問

查看完整回答
反對 回復 2019-03-01
  • 1 回答
  • 0 關注
  • 455 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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