static關鍵字

static表示“全局”或者“靜態”的意思,用來修飾成員變量和成員方法,也可以形成靜態static代碼塊

static關鍵字的主要作用:
方便在沒有創建對象的情況下來進行調用(方法/變量)。

調用變量
static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。

public class Person {
    String name;
    int age;
    String gender;
    //static 修飾成員變量
    static String country = "CN";
    Person() {
    }
    Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
}

    void speak() {
        System.out.println("國籍:" + country + " 姓名:" + name + " 性別:" + gender
                + " 年齡:" + age + " 哈哈!!!");
}

    public static void main(String[] args) {

            //訪問靜態成員
            //直接通過類名來調用
            String country=Person.country;
            System.out.println(country);
            //通過對象.成員的形式訪問
            Person p1 = new Person("jack", 20, "男");
            p1.country="US";
            p1.speak();
    }
}

調用方法
static方法一般稱作靜態方法。
靜態方法可以使用類名直接調用
1.靜態方法中不能訪問非靜態成員變量,只能訪問靜態變量。
2.靜態方法不可以定義this,super關鍵字.
3.因爲靜態優先於對象存在.靜態方法中更不可以出現this
4.非靜態函數:非靜態函數中可以訪問靜態成員變量

public class Person {
        String name;
        int age;
        String gender;
        static String country = "CN";
        Person() {
        }

        Person(String name, int age, String gender) {
            this.name = name;
            this.age = age;
            this.gender = gender;

        }
        //靜態方法
        static void run(){
            //靜態方法只能訪問靜態成員變量。
            System.out.println("國籍:"+country);

            //靜態方法訪問非靜態成員變量,編譯報錯。
//          System.out.println(" 姓名:" + name);

            //靜態方法中不可以出現this,編譯報錯
//          this.speak();
        }
        public static void main(String[] args) {

            String country=Person.country;
            System.out.println(country);
            //通過對象.成員的形式訪問
            Person.run();
    }
}

總結

靜態優缺點
優點:對對象的共享數據進行單獨空間的存儲,節省空間 例如Person 都有
國籍。該數據可以共享可以被類名調
缺點:生命週期過長,訪問出現侷限性。(靜態只能訪問靜態)

什麼時候定義靜態變量
靜態變量(類變量)當對象中出現共享數據
例如:學生的學校名稱。學校名稱可以共享對象的數據要定義爲非靜態的存放在對內存中(學生的姓名,學生的年齡)
什麼時候定義靜態函數
如果功能內部沒有訪問到非靜態數據(對象的特有數據。那麼該功能就可以定義爲靜態)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章