Java - 24 類變數和類方法
類變數(靜態變數)
非靜態變數 = 普通變數 = 例項變數
class Main{
public static void main(String[] args){
Child c1 = new Child("wu");
c1.join();
c1.count++;
Child c2 = new Child("xin");
c2.count++;
// 類變數可以透過類名訪問
System.out.println("共有" + Child.count + "個小孩加入了遊戲");
}
}
class Child{
private String name;
/* ======== */
public static int count = 0; // 被Child所有物件例項共享
public Child(String name){
this.name = name;
}
public void join(){
System.out.println(name + "加入了遊戲...");
}
}
類變數記憶體佈局
static變數在哪裡?
- jdk8之前,在堆中class例項的尾部;
- 在方法區的靜態域
static變數在類載入的時候生成
類變數細節
- 類變數在類載入時就初始化了,即使沒有建立物件,只要類載入了,就可以使用類變數了
- 類變數的生命週期隨類的載入開始,隨類消亡而銷燬
類方法(靜態方法)
訪問修飾符 static 資料返回型別 方法名(){}
類方法的呼叫
類名.類方法名
物件名.類方法名
使用場景
方法中不涉及到任何和物件相關的成員 (不建立例項也可以呼叫方法),則可以將方法設計成靜態方法,提高開發效率
類方法細節
- 類方法和普通方法都是隨著類的載入而載入,將結構資訊儲存在方法區
- 類方法中 不能使用和物件有關的關鍵字,比如: this 和 super
- 類方法中,只能訪問靜態變數和靜態方法
class Person{
private static int total = 0;
private static void setTotalPerson(int total){
Person.total = total; // 不是this.total = total;
}
}