類的初始化:jvm只會在 「首次主動使用」 乙個類/介面時,才會初始化它們。
通過 new 構造類的例項
package init;
class test
}public class run
}
static **塊會在類初始化時自動載入,如果以上**輸出了test1 static ...
說明test1
類被初始化了。
以上** new 了兩次test1
物件,但是只列印了一次,因為只有在首次使用時,才會初始化該類。
訪問類/介面的靜態成員(屬性,方法)
package init;
class test
static int i = 10;
static void testmethod() }
public class run
}
特殊情況
反射使用的類
package init;
class test
}public class run
}
初始化乙個子類時,該子類的父類也會被初始化package init;
public class father
}
package init;
public class son extends father
}
package init;
public class run
}
結果:
father static .....
son static ......
動態語言
動態語言在執行過程中所涉及的類,也會被初始化(動態**)
除了主動使用以外,其他都是被動使用
package init;
class test
}public class test4
}
通過陣列定義引用類,為類的被動使用,不會觸發該類的初始化。
為什麼呼叫靜態常量不會初始化類
class test
}/**
* run的常量池中儲存了test中產生的常量[i = 10]
*/public class run
}
通過檢視 run 類的 class 檔案後發現,輸入語句直接輸出了10,與 test 中的 10 沒有任何關係。
public class run
public static void main(string args)
}
列舉類相關使用方式
先定義乙個列舉類 getter public enum consumptionenums 獲取列舉類的列舉物件 valus 方法獲取列舉類的所有列舉物件,返回陣列 consumptionenums values consumptionenums.values 必要時可以轉成list集合 list c...
python使用List和類的方式構建樹和二叉樹
使用list構建樹 g g h h i i k k e e g,h,i,k d d f f a a d,e b b c c f root root a,b,c print root class btree 二叉樹節點 def init self,value 初始化函式 self.left none ...
類成員的保護方式
定義類,就是將該類的字段 屬性 事件 方法 類中的函式和過程 封裝在類的內部。這些字段 屬性 事件 方法就是類的成員。就物件而言,也是物件的資料和成員。類成員的保護模式也就是類成員訪問時的可見性,對於這些資料和成員的訪問,有以下四種保護 訪問 模式,分別使用下列關鍵字 1 private 私有的 在...