class test { static { a=3; //System.out.PRintln(a); } static int a = 1; String b = "ff"; public static void main (String[] args) throws java.lang.Exception { System.out.println("hi"); new test(); } }這樣的代碼有沒語法錯誤呢? 實際上是沒有的。可能有人認為是不行的,變量定義在代碼塊賦值后面,先賦值了。既然這樣是對的,那么看下面這段代碼對不對呢。
class test { static { a=3; System.out.println(a); } static int a = 1; String b = "ff"; public static void main (String[] args) throws java.lang.Exception { System.out.println("hi"); new test(); } }在靜態代碼塊中有一條輸出語句,應該有挺多人看了上面的例子以為這段代碼的語法是正確的吧。其實System.out.println(a);這段代碼是有錯誤的。
a=3;是賦值
System.out.println(a);是調用 兩個是不一樣概念的。
為什么錯呢?這個是編譯期異常。遵循一個先定義后使用的原則。不過能賦值這里就不太能夠理解了。難道是先加載類的結構信息,構造函數,方法,屬性等。即使變量定義在最后一行,還是可以在第一行進行賦值。
新聞熱點
疑難解答