標籤:class [] .sh 改變 www. 變數賦值 不能 靜態初始化 tar
java裡初始化一個類的對象,通過初始化快或者構造方法進行資料賦值。與其相關的執行代碼有這麼幾種:
靜態初始化塊
靜態初始化塊只在類載入時執行一次,同時靜態初始化塊只能給靜態變數賦值,不能初始化普通的成員變數。
非靜態初始化塊
非靜態初始化塊在每次初始化執行個體對象的時候都執行一次,可以給任意變數賦值。
構造方法
在每次初始化執行個體對象時調用。
重點:執行順序->
- 在載入類時執行一次靜態初始化塊(之後不再調用)。
- 在每次初始化執行個體對象時:先執行非靜態初始化塊,再執行構造方法。
若是概念不好懂,請看如下執行個體:
public class InitializationClass {
String name; // 聲明變數name
String sex; // 聲明變數sex
static int age;// 聲明靜態變數age
// 構造方法
public InitializationClass() {
System.out.println("通過構造方法初始化name");
name = "tom";
}
// 構造方法
public InitializationClass(String name) {
System.out.println("通過參數構造方法初始化name");
this.name = name;
}
// 構造方法
public InitializationClass(int age) {
System.out.println("通過構造方法改變static InitializationClass.age");
InitializationClass.age = age;
}
// 構造方法
public InitializationClass(String name, String sex) {
System.out.println("通過構造方法初始化name age");
this.name = name;
this.sex = sex;
}
// 初始化塊
{
System.out.println("通過初始化塊初始化sex");
sex = "男";
}
// 靜態初始化塊
static {
System.out.println("通過靜態初始化塊初始化age");
age = 20;
}
public void show() {
System.out.println("姓名:" + name + ",性別:" + sex + ",年齡:" + age);
System.out.println("------------------------------");
}
public static void main(String[] args) {
// 建立對象
InitializationClass obj1 = new InitializationClass("qiuhua");
obj1.show();
InitializationClass obj2 = new InitializationClass(10);
obj2.show();
InitializationClass obj3 = new InitializationClass("jing", "女");
obj3.show();
}
}
通過靜態初始化塊初始化age
通過初始化塊初始化sex
通過參數構造方法初始化name
姓名:qiuhua,性別:男,年齡:20
------------------------------
通過初始化塊初始化sex
通過構造方法改變static InitializationClass.age
姓名:null,性別:男,年齡:10
------------------------------
通過初始化塊初始化sex
通過構造方法初始化name age
姓名:jing,性別:女,年齡:10
------------------------------
轉:https://www.cnblogs.com/Berryxiong/p/6245100.html
Java類 初始化塊