執行順序:靜態代碼塊--非靜態代碼塊--默認構造方法--普通方法
使用地方:非靜態代碼塊可在普通方法中定義(不過作用不大)。靜態代碼塊必須在類中進行
使用場景:靜態代碼塊可用來初始化一些項目最常用的變量或對象
靜態方法可用作不創建對象也可能需要執行的代碼
執行情況:靜態代碼塊在類被加載的時候自動運行(通俗點講就是new後自動執行了靜態代碼塊)
靜態方法只有在被調用的時候才執行
訪問權限:非靜態方法既可以訪問靜態數據成員 又可以訪問非靜態數據成員,而靜態方法只能訪問靜態數據成員
非靜態方法既可以訪問靜態方法又可以訪問非靜態方法,而靜態方法只能訪問靜態數據方法
實例:
public class Static {
//默認構造方法
public Static() {
System.out.println("<<<<<<<<<<默認構造方法<<<<<<<<<");
}
//非靜態代碼塊
{
System.out.println("<<<<<<<<<<非靜態代碼塊<<<<<<<<<");
}
//靜態代碼塊
static{
System.out.println("<<<<<<<<<<靜態代碼塊<<<<<<<<<");
}
//普通方法中的非靜態代碼塊
public static void test() {
{
System.out.println("<<<<<<<<<<普通方法中的非靜態代碼塊<<<<<<<<<");
}
}
}
public class DoStatic {
public static void main(String[] args) {
//new出對象後,執行test(),因爲new後,靜態代碼塊和構造方法都被執行
Static s = new Static();
s.test();
//不new出對象後,執行test(),因爲沒有new的動作,靜態代碼塊和構造方法都不被執行,只執行test()方法
Static.test();
}
}
結果:
<<<<<<<<<<靜態代碼塊<<<<<<<<<
<<<<<<<<<<非靜態代碼塊<<<<<<<<<
<<<<<<<<<<默認構造方法<<<<<<<<<
<<<<<<<<<<普通方法中的非靜態代碼塊<<<<<<<<<
<<<<<<<<<<普通方法中的非靜態代碼塊<<<<<<<<<