類變量(static變量,不須要實例化對象也能夠引用)
實例變量(非static變量,須要實例化對象)
局部變量(類的成員函數中的變量)java
初始化方式:
構造函數初始化
變量聲明時初始化
代碼塊初始化
java自動初始化(在構造函數執行以前執行)
函數
java保證全部變量被使用以前都是通過初始化的(聲明而且定義過,被賦值過).
靜態數據成員只有第一次被使用的時候會被初始化,其餘時間都不會再執行初始化.對象
靜態成員變量和靜態代碼塊的執行
編譯器在解析一個類定義的時候,會先去搜集全部相關成員變量的相關的語句.
肯定當前變量是否被聲明(這個時候不會去定義,不會初始化,包括自動初始化).
而後按照代碼的前後順序,依次執行相關語句,對變量進行賦值操做.
靜態變量和靜態代碼塊的執行優先於非靜態成員變量和非靜態代碼塊.繼承
非靜態成員變量和非靜態代碼塊的執行
與靜態成員變量和靜態代碼塊的初始化方式同樣.
只有在類實例化的時候纔會執行非靜態成員變量和非靜態代碼塊.
構造函數的執行在變量自動初始化和代碼塊以後,構造函數賦值以前,變量已經被代碼塊賦值或者已經被聲明時初始化.
繼承類的初始化
父類的構造函數,先於子類的非靜態代碼塊執行.
先執行靜態代碼,再執行非靜態代碼,而後執行構造函數.
先實例化父類成員,再實例化子類成員.
編譯器