代碼的執行不是應該和寫的順序無關嗎 但是為什麼構造塊和成員變量的順序不一樣,執行的結果也不一樣呢???
求大神解答
你的理解是有誤的,成員變量的初始化值跟代碼順序有一定關系的。java創建對象時,對實例變量即類的非靜態成員的初始化,主要在三個地方
1 成員變量定義時指定初始值
2 非靜態代碼塊中指定初始值
3 構造函數中對成員變量指定初值值
這三種方式1,2執行先於構造函數3的執行,但是1,2方式的執行順序與源程序中的排列順序相同。
分析你的兩段代碼,由於你沒有在構造函數中初始化成員變量,所以成員變量a的值主要由1、2在代碼中的位置決定。第一段代碼,非靜態代碼塊的賦值在後面,所以覆蓋了a=10,最終值為100;第二段代碼,成員變量定義時初始化代碼在後面,所以最終結果是10。