1. 程式人生 > 其它 >Java基礎-靜態變數(類變數)

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 = "北京";
}