java初始化順序

2021-08-07 16:01:20 字數 1078 閱讀 5381

先貼一段**,結果輸出弄明白了,就不用往下看了
class meal

static string wsp=printf("base static field");

static string printf(string s)

int money=getint(7);

int getint(int x)

}class bread

}public

class

rewrite

extends

meal

static string wsp=meal.printf("super static field");

public

static

void

main(string args)

}//output:可以說明大部分情況了~

base static field

super static field

base non-static field

base constructor: meal()

super non-static field

super constructor: rewrite()

首先是靜態變數(域或者方法),它隨著類的編譯一起被初始化,當讀到 public class rewrite 時就會被初始化,畢竟是不依賴於物件的類變數;

但由於rewrite 後又有extends關鍵字,編譯器會去先編譯基類;畢竟匯出類中的**靜態變數很有可能會依賴於基類終端靜態變數**

然後,全部基類的靜態變數都初始化完畢後,呼叫匯出類(rewrite)的構造器,然後呼叫基類的構造器(super());

在基類中,構造器初始化之前,類內的非靜態變數進行初始化;即使變數定義散步在方法定義之間,它們仍會在任何方法(包括構造器)被呼叫之前得到初始化(?感覺tij4描述有點問題)

所有基類構造器都初始化完畢,就可以對當前匯出類進行初始化了。輸出顯示確實是按照這樣的順序執行的;

個人理解,如有不正確的地方還請多多指點^_^

java初始化順序

1 父類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 2 子類靜態成員和靜態初始化塊 按在 中出現的順序依次執行 3 父類例項成員和例項初始化塊 按在 中出現的順序依次執行 4 父類構造方法 5 子類例項成員和例項初始化塊 按在 中出現的順序依次執行 6 子類構造方法 public abstr...

java初始化順序

例如以下 package chapter5 public class demo1one public void printinfo public static void main string args 程式一開始先執行 private static string password 0721 這行 ...

JAVA初始化順序

1 當使用新建物件例項或者呼叫靜態成員變數或者方法時,初始化靜態變數 2 靜態變數在初始化時在前面的先初始化,靜態塊和靜態變數相同對待 在初始化過程中,有新建物件例項的時候,暫時停止後面的靜態變數初始化 3 靜態變數沒有初始化時,使用預設的初始值 如int為0 4 新建物件例項,對非靜態的成員變數進...