靜態代碼塊可以對在其之後出現的靜態常量進行賦值----解析

靜態代碼塊可以將在其之後出現的靜態常量進行復制

比如底下這個例子,開始確實挺難理解的,覺得是肯定是static int m=100; 先執行,因爲上面的靜態代碼塊裏m未定義類型,所以我特意將底下的定義類型給註釋掉看結果

public class Test {
    public static void main(String[] args) {
        A a = new A();
        System.out.println(a.m);
    }
}
class A{
    static{
        System.out.println("A類靜態代碼塊" );
        m=200;
    }
    static int m=100;
    public A(){
        System.out.println("B類代碼塊");
    }
}

在這裏插入圖片描述

可以看到,結果如下圖。我分析了一下,以下是我的見解
static int m=100
這行代碼其實是執行了兩個步驟

  • 1.定義了一個int類型的常量
  • 2.對其進行賦值

也就是說在爲m進行初始化的時候m的初值應該是0,此時在常量池中爲其開闢了空間。然後纔是進行賦值操作。在賦值時,靜態代碼塊和靜態常量都是靜態的,應當由上往下執行,所以m先被賦值爲200,然後才執行到了m=100,這也就不難理解爲啥最後輸出的m是100

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章