天天看點

靜态變量與靜态方法

static:可實作所有的對象共享一個成員變量。被 static 修飾的成員稱為靜态成員或類成員。它屬于整個類所有,而不是某個對象所有,即被類的所有對象所共享。

通路static成員變量有兩種方式:

直接用

類名.成員變量名

通路;

定義類的對象,使用

對象.成員變量名

通路。

public class Name {
    static String name="張三";

    public static void main(String[] args) {
        System.out.println("通過‘類名.成員變量名’通路成員變量,名字是"+Name.name);

        Name na=new Name();
        System.out.println("通過‘對象.成員變量名’通路成員變量,名字是"+na.name);
    }
}
           

運作結果如下:

靜态變量與靜态方法

使用static修飾的方法稱為靜态方法或類方法,main()方法就是典型的靜态方法。

1、 靜态方法中可以直接調用同類中的靜态成員,但不能直接調用非靜态成員。

如果希望在靜态方法中調用非靜态變量,可以通過建立類的對象,然後通過對象來通路非靜态變量。
           

如下程式第7行,靜态方法main()中通路非靜态成員age,編譯報錯。

public class Name {
    static String name="張三";
    int age=;

    public static void main(String[] args) {
        System.out.println("通過‘類名.成員變量名’通路成員變量,名字是"+Name.name);
        System.out.println("通過‘類名.成員變量名’通路成員變量,名字是"+Name.age);

        Name na=new Name();
        System.out.println("通過‘對象.成員變量名’通路成員變量,名字是"+na.name);
        System.out.println("通過‘對象.成員變量名’通路成員變量,年齡是"+na.age);
    }
}
           
上述程式第11行通過對象來通路非靜态成員。
           

2、 在普通成員方法中,則可以直接通路同類的非靜态變量和靜态變量。

如下程式,在showInfo()中,直接通路非靜态變量age和靜态變量name。

public class Name {
    static String name="張三";
    int age=;

    public void showInfo(){
        System.out.println("普通成員方法中直接通路成員變量,名字是"+name);
        System.out.println("普通成員方法中直接通路成員變量,年齡是"+age);
    }

    public static void main(String[] args) {
        Name na=new Name();
        na.showInfo();
    }
}
           

程式運作結果如下:

靜态變量與靜态方法

3、 靜态方法中不能直接調用非靜态方法,需要通過對象來通路非靜态方法。

如上程式在靜态方法main()中通路非靜态方法showInfo(),通過對象na來通路。

靜态初始化塊

初始化塊完成對資料的指派功能。在類的聲明中,可以包含多個初始化塊,這些代碼塊會在當建立對象時依次執行。

如果使用 static 修飾的初始化塊稱為靜态初始化塊。

在類加載時執行,且隻會執行一次;
靜态初始化塊隻能給靜态成員變量指派。
           
public class Name {
    String name1;
    String name2;
    static String name3;

    public Name(){
        name1="張三";
        System.out.println("構造方法為name1指派");
    }
    {
        name2="李四";
        System.out.println("初始化塊為name2指派");
    }

    static {
        name3="王五";
        System.out.println("靜态初始化塊為name3指派");
    }

    public static void main(String[] args) {
        Name na=new Name();
        System.out.println("num1"+na.name1);
        System.out.println("num2"+na.name2);
        System.out.println("num3"+name3);

        Name nam=new Name();
    }
}
           

程式執行情況如下:

靜态變量與靜态方法

由上述程式執行情況可以看出,靜态初始化塊最先被執行

其次執行,初始化塊

最後執行,構造方法

繼續閱讀