從零開始學JAVA——類的成員之四,程式碼塊(或初始化塊)
阿新 • • 發佈:2020-12-15
類的成員之四,程式碼塊(或初始化塊)
- 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("我是一個快樂的人!");
}
}