關於java 的static程式碼塊注意以及測試
阿新 • • 發佈:2019-02-02
public class Test {
//非靜態塊:每次初始化一個物件,都會導致一次非靜態塊的執行;在建構函式執行之前執行
//繼承關係:父類的非靜態塊->父類的建構函式->自己的自由塊->自己的建構函式
{
System.out.println("before");
}
static int x = 10;
static{
x+=5;
System.out.println("static1");
}
public static void main(String[] args) {
new Test();
new Test();
System.out.println(x);
//靜態塊
static {
x/=3;
System.out.println("static2");
}
public Test(){
System.out.println("建構函式");
}
//非靜態塊:每次初始化一個物件,都會導致一次非靜態塊的執行;在建構函式執行之前執行
//繼承關係:父類的非靜態塊->父類的建構函式->自己的自由塊->自己的建構函式
{
System.out.println("before");
}
static int x = 10;
static{
x+=5;
System.out.println("static1");
}
public static void main(String[] args) {
new Test();
new Test();
System.out.println(x);
}
static {
x/=3;
System.out.println("static2");
}
public Test(){
System.out.println("建構函式");
}
}
注意:
1.靜態程式碼塊會在類被載入時自動執行。且優先於非靜態程式碼塊和例項方法之前執行,有且只執行一次
2.靜態程式碼塊只能定義在類裡面,不能定義在方法裡面。
3.靜態程式碼塊裡的變數都是區域性變數,只在塊內有效。
4.一個類中可以定義多個靜態程式碼塊,按順序執行,且先執行完所有的靜態塊,在進行呼叫
5.靜態程式碼塊只能訪問類的靜態成員,而不允許訪問例項成員。
6.java中的自由塊分為兩種:靜態塊和非靜態塊
7.當建立Test類的一個物件的時候,比如new Test()首先是類載入,然後才能new物件,靜態塊在類載入的時候就執行了,這就說明靜態塊在new物件之前就會執行,而且一個 類在第一次被使用的時候會被載入,然後在整個應用程式的生命週期當中不會再次被載入了,就載入這一次,所以這就說明,靜態塊就執行一次,不會執行第二遍!
輸出結果:
static1
static2
before
建構函式
before
建構函式
5