Java static關鍵字

static 關鍵字
static可以修飾類(內部類),成員變量,方法
局部變量不能用static修飾
static修飾成員變量
static修飾的成員變量稱爲靜態成員變量,沒有使用static修飾的變量叫做實例成員變量
靜態成員變量與實例成員變量的區別
1.從變量的個數上講
靜態成員變量歸整個類所有,由所有的對象所共享
改變了靜態成員變量的值,其他對象調用的結果是修改後的結果,影響其他對象。
實例成員變量歸當前對象所有,值的改變不影響其他對象。
2.訪問方式
靜態成員變量的推薦訪問方式,通過類名.靜態成員變量的方式訪問。
3.初始化時間
類初始化的時候靜態成員變量初始化,實例成員變量在創建對象時纔會初始化,靜態成員
變量初始化早於實例成員變量,靜態成員變量不依賴對象而存在。
static修飾方法
使用static修飾的方法稱爲靜態方法
沒有使用static修飾的方法稱爲實例方法
1.從訪問方式上講
靜態方法既可以通過類名來訪問也可以通過指向對象的引用來訪問(不推薦)
2.成員的訪問
靜態方法只能訪問類中的靜態成員,不能訪問實例成員
實例方法既可以訪問靜態成員,也可以訪問實例成員
3.this和super的使用
靜態方法中不能使用this與super。
而實例方法中可以使用this與super。

public class Static {
    //靜態成員變量
    static int x=1;
    //實例成員變量
    int y = 2;
    public void method(){}
    public static void method1(){}
    public static void main(String[] args) {
        Static s = new Static();
        Static s2 = new Static();
        s.y=3;
        System.out.println("y的值:"+s2.y);
        s.x=3;
        System.out.println("x的值:"+s2.x);
        //實例方法的調用
        s.method();
        //靜態方法的調用
        s.method1();
        Static.method1();
        method1();
    }
}
y的值:2
x的值:3

靜態成員變量的初始化
1.聲明處初始化
2.使用靜態初始化塊
3.兩種初始化執行順序,按代碼編寫順序執行
不能在構造器中對靜態成員變量進行初始化,因爲構造器在創建
對象的時候纔會得到執行。而靜態成員變量不需要創建任何對象
就能夠進行訪問。

public class StaticInit {
    //聲明處初始化
    static int x=getX();
    //靜態初始化塊
    //靜態初始化塊會在初始化類時得到執行(在main方法執行之前執行)
    static{
        x = 2;
        System.out.println("靜態初始化塊");
    }
    public static int getX(){
        System.out.println("聲明處初始化");
        return 5;
    }
    public static void main(String[] args) {
        System.out.println("main方法");
    }
}
聲明處初始化
靜態初始化塊
main方法
發佈了35 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章