Java - 24 類變數和類方法

wajiez發表於2024-10-31

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變數在類載入的時候生成

類變數細節

  1. 類變數在類載入時就初始化了,即使沒有建立物件,只要類載入了,就可以使用類變數了
  2. 類變數的生命週期隨類的載入開始,隨類消亡而銷燬

類方法(靜態方法)

訪問修飾符 static 資料返回型別 方法名(){}

類方法的呼叫

類名.類方法名
物件名.類方法名

使用場景

​ 方法中不涉及到任何和物件相關的成員 (不建立例項也可以呼叫方法),則可以將方法設計成靜態方法,提高開發效率

類方法細節

  1. 類方法和普通方法都是隨著類的載入而載入,將結構資訊儲存在方法區
  2. 類方法中 不能使用和物件有關的關鍵字,比如: this 和 super
  3. 類方法中,只能訪問靜態變數和靜態方法
class Person{
    private static int total = 0;
    private static void setTotalPerson(int total){
        Person.total = total; // 不是this.total = total;
    }
}

相關文章