2019獨角獸企業重金招聘Python工程師標準>>>
類變量(static變量,不需要實例化對象也可以引用)
實例變量(非static變量,需要實例化對象)
局部變量(類的成員函數中的變量)
初始化方式:
構造函數初始化
變量聲明時初始化
代碼塊初始化
java自動初始化(在構造函數執行之前執行)
?
java保證所有變量被使用之前都是經過初始化的(聲明并且定義過,被賦值過).
靜態數據成員只有第一次被使用的時候會被初始化,其他時間都不會再執行初始化.
靜態成員變量和靜態代碼塊的執行
編譯器在解析一個類定義的時候,會先去搜集所有相關成員變量的相關的語句.
確定當前變量是否被聲明(這個時候不會去定義,不會初始化,包括自動初始化).
然后按照代碼的先后順序,依次執行相關語句,對變量進行賦值操作.
靜態變量和靜態代碼塊的執行優先于非靜態成員變量和非靜態代碼塊.
非靜態成員變量和非靜態代碼塊的執行
與靜態成員變量和靜態代碼塊的初始化方式一樣.
只有在類實例化的時候才會執行非靜態成員變量和非靜態代碼塊.
構造函數的執行在變量自動初始化和代碼塊之后,構造函數賦值之前,變量已經被代碼塊賦值或者已經被聲明時初始化.
繼承類的初始化
父類的構造函數,先于子類的非靜態代碼塊執行.
先執行靜態代碼,再執行非靜態代碼,然后執行構造函數.
先實例化父類成員,再實例化子類成員.
?
?