1. 程式人生 > 其它 >從零開始學JAVA——類的成員之四,程式碼塊(或初始化塊)

從零開始學JAVA——類的成員之四,程式碼塊(或初始化塊)

技術標籤:javajava

類的成員之四,程式碼塊(或初始化塊)

  • 1.程式碼塊的使用:用來初始化類、物件
  • 2.程式碼塊如果有修飾的話,只能使用static
  • 3.分類:靜態程式碼塊與非靜態程式碼塊
  • 4.靜態程式碼塊
  • 內部可以有輸出語句

  • 隨著類的載入而執行,而且只執行一次

  • 作用:初始化資訊

  • 如果一個類中定義了多個靜態程式碼塊,則按照宣告先後順序執行

  • 靜態程式碼塊的執行要優先於非靜態程式碼塊的執行

  • 靜態程式碼塊內只能調靜態的屬性、靜態的方法,不能呼叫非靜態的結構

  • 5.非靜態程式碼塊
  • 內部可以有輸出語句

  • 隨著物件建立而執行

  • 每建立一個物件,就執行一次非靜態程式碼塊

  • 作用:可以在建立物件時,對物件的屬性等進行初始化

  • 如果一個類中定義了多個非靜態程式碼塊,則按照宣告先後順序執行

  • 非靜態程式碼塊可以呼叫靜態的屬性、靜態的方法、或非靜態屬性、非靜態方法

  • 對屬性可以賦值的位置:
  • 1)預設初始化
  • 2)顯示初始化
  • 3)構造器中初始化
  • 4)有了物件以後,可以通過“物件.屬性”或“物件.方法”的方式,進行賦值
  • 5)在程式碼塊中賦值
    */
public class BlockTest {
	public static void main(String[] args) {
		String desc=Person.desc;
		System.out.println
(desc); Person p1 = new Person(); Person p2 = new Person(); System.out.println(p1.age); } } class Person{ //屬性 String name; int age; static String desc = "我是一個人"; //構造器 public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } //static程式碼塊
static{ System.out.println("hello,static block-1"); desc = "我是一個愛學習的人"; } static{ System.out.println("hello,static block-2"); } //非static程式碼塊 { System.out.println("hello, block"); //呼叫非靜態結構 age=1; eat(); //呼叫靜態結構 desc = "我是一個愛學習的人"; info(); } //方法 public void eat() { System.out.println("吃飯"); } @Override public String toString() { return "Person [name=" + name + ", age=" + age + "]"; } public static void info() { System.out.println("我是一個快樂的人!"); } }