Java基礎-靜態變量(類變量)


package com.hspedu.static_;

public class Course374 {
    public static void main(String[] args) {
        // 類變量快速入門

        // 這樣使用靜態static變量不規范
        Child child1 = new Child("白骨精");
        child1.join();
        child1.count++;
        Child child2 = new Child("狐狸精");
        child2.join();
        child2.count++;
        Child child3 = new Child("蜘蛛精");
        child3.join();
        child3.count++;

        // 類變量可以通過 類名.變量名 訪問
        System.out.println("現在共有:" + Child.count + " 個加入了");
        System.out.println(child1.count);
        System.out.println(child2.count);
        System.out.println(child3.count);
    }
}

class Child {

    private String name;

    // 定義一個類變量(靜態變量),static
    // 所有的對象都可以共享這個屬性
    public static int count;    // int默認值是0

    public Child(String name) {
        this.name = name;
    }

    public void join() {
        System.out.println(this.name + "加入了..");
    }
}

 

package com.hspedu.static_;

public class Course375 {
    public static void main(String[] args) {
        // 類變量/靜態變量的內存分析

        /*
         *   1、child1、child2、child3對象當中都存放了一個地址,
         *      這個地址指向了count存放的位置(可能是堆空間、可能是方法區的靜態域)
         *      靜態變量不管是存放在哪里,不影響其使用方式,所有對象均指向一個位置
         *   2、方法區有個空間叫:靜態域
         *   3、靜態變量的存放位置和jdk的版本有關,一般jdk7之前是在方法區中,jdk8以后是在堆空間
         *   4、類第一次在加載的時候,方法區會生成類信息,同時也會在堆空間上生成一個對應的Class對象(反射部分)
         *
         * */
        Child child1 = new Child("Tom");
        Child child2 = new Child("Jack");
        Child child3 = new Child("Mary");

    }
}


class Child {

    private String name;

    public static int count = 0;

    public Child(String name) {
        this.name = name;
    }

    public void join() {
        System.out.println(this.name + "加入了..");
    }
}
package com.hspedu.static_;

public class Course377 {
    public static void main(String[] args) {
        // 類變量(靜態變量)訪問細節

        /*
         * 1、使用靜態變量的需求:所有對象共享一個屬性值(例如統計)
         * 2、靜態變量和實例變量區別:靜態變量是所有對象共享、實例變量是每個對象獨有
         * 3、訪問方式:類名/對象.變量名(前提是滿足訪問權限)
         * 4、實例變量不能通過類.變量名的方式訪問
         * 5、類加載了,不需要實例化也可以使用靜態變量
         * 6、靜態變量的聲明周期是隨着類的加載開始,類的消亡而銷毀
         * */

        A a = new A();
        System.out.println(A.n2);
        // System.out.println(A.n1);

        System.out.println(B.address);

    }
}

class A {

    // 類變量/靜態變量
    public static String name = "韓順平教育";

    // 普通屬性/普通成員變量/非靜態變量/實例變量
    private int num = 10;

    public int n1 = 100;    // 不能通過A.n1訪問

    public static int n2 = 200;
}

class B {
    public static String address = "北京";
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM