1. 程式人生 > 實用技巧 >五(十三)程式碼塊

五(十三)程式碼塊

類的成員之四:程式碼塊
1.程式碼塊的作用:初始化當前類,或者物件;
2.程式碼塊如果有修飾的話,只能用static;
3.分類:靜態程式碼塊 vs 非靜態程式碼塊;
4.靜態程式碼塊
可以有輸出語句;
隨著類的載入而執行;且執行一次;
可以初始化類的資訊
如果定義了多個靜態程式碼塊,則按照宣告的先後順序執行,靜態程式碼塊的執行優先非靜態程式碼塊的執行;
只能呼叫靜態結構 不能呼叫 非靜態結構

5.非靜態程式碼塊
可以有輸出語句;
隨著物件的建立而執行;
每建立一個物件,就執行一次非靜態程式碼塊;
作用:可以在建立物件時,對物件的屬性等進行初始化;
如果定義了多個非靜態程式碼塊,則按照宣告的先後順序執行


可以呼叫靜態結構 和 非靜態結構
物件屬性可以賦值的位置:
a.預設初始化
b.顯示初始化;
c.構造器初始化;
d.物件.屬性
e.程式碼塊賦值

執行順序:a b e c d e
由父及子,靜態先執行;在下面例子中,有一個靜態程式碼塊和非靜態程式碼塊;這裡預設就是先執行靜態程式碼塊;並且靜態程式碼塊只執行一次;

Person6有父類,並且他的父類有程式碼塊,那麼,先執行父類的程式碼塊,再執行Person6的程式碼塊;確切的說是:先執行父類的靜態程式碼塊,再執行子類的靜態程式碼塊,先執行父類的非靜態程式碼塊

再執行子類的非靜態程式碼塊;

檢視程式碼:

 1 public class Day14CodeBlock20 {
2 public static void main(String[] args) { 3 String desc = Person6.desc; 4 Person6 person1 = new Person6(); 5 Person6 person2 = new Person6(); 6 } 7 } 8 class Person6{ 9 private String name; 10 private int age; 11 static String desc ="我是一個人"; 12 public String getName() {
13 return name; 14 } 15 public void setName(String name) { 16 this.name = name; 17 } 18 public int getAge() { 19 return age; 20 } 21 public void setAge(int age) { 22 this.age = age; 23 } 24 25 //static程式碼塊 26 static{ 27 System.out.println("靜態程式碼塊"); 28 } 29 //程式碼塊 30 { 31 System.out.println("非靜態程式碼塊"); 32 } 33 34 35 36 public void eat() { 37 System.out.println("人吃飯。。。。"); 38 study(); 39 } 40 41 public void study() { 42 System.out.println("學習。。。"); 43 } 44 public Person6(String name, int age) { 45 //super(); 46 this(age); 47 this.name = name; 48 //this.age = age; //等同於 this("Tome"); 49 } 50 public Person6() { 51 super(); 52 } 53 public Person6(String name) { 54 this();//呼叫當前的空參構造器 55 //super(); 56 this.name = name; 57 58 } 59 public Person6(int age) { 60 //super(); 61 this.age = age; 62 } 63 public static void info() { 64 System.out.println("我是一個快樂的人!"); 65 } 66 67 }