Java基礎13: 代碼塊

1.   普通代碼塊:方法中的代碼塊, 不能單獨執行, 必須調用方法才能執行

2.   構造代碼塊:在類中, 沒有任何前綴和後綴, 使用"{}"包起來的代碼塊

3.   靜態代碼塊:在類型,使用static修飾,並使用"{}"包起來的代碼塊

4.   同步代碼塊:使用synchronized修飾,並使用"{}"包起來的代碼塊

public class UserTest {

   private int id;

   private String name;

   public static AtomicInteger count = new AtomicInteger(0);//統計實例化數量

    {

       count.getAndIncrement();

       System.out.println("構造代碼塊 count =" + count);

   }

   static {

        String str = "靜態代碼塊執行...";

        System.out.println(str);

   }

   public UserTest() {

       this(count.get() + 1, "name"+(count.get() + 1));

       System.out.println("UserTest()....");

   }

   public UserTest(int id) {

       this.id = id;

       System.out.println(String.format("UserTest(%s)....", id));

   }

   public UserTest(int id, Stringname) {

       this.id = id;

       this.name = name;

       System.out.println(String.format("UserTest(%s,%s)....", id, name));

   }

   public static void main(String[] args) {

       new UserTest(1);

       new UserTest(2);

       new UserTest(3, "name3");

       new UserTest();

   }

}

運行結果:

    靜態代碼塊執行...

    構造代碼塊 count = 1

    UserTest(1)....

    構造代碼塊 count = 2

    UserTest(2)....

    構造代碼塊 count = 3

    UserTest(3, name3)....

    構造代碼塊 count = 4

    UserTest(4, name4)....

    UserTest()....

 

運行過程分析:

    1. 在實例化一個對象之前, 先執行靜態代碼塊, 而且只執行一次, 可以用來實例化全局變量, 用來做單例模式等等

    2. 每次實例化一個對象之前, 都要先執行構造代碼塊, 所以可以把構造函數中通用的代碼提取出來, 可以用來統計實例化次數等等

    3. 如果構造函數調用了this()方法, 那麼該構造函數不執行構造代碼塊, 被調用的構造方法中會執行構造代碼塊
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章