天天看點

教妹學Java(二十六):static 關鍵字解析(2)

02、 什麼是靜态方法

如果方法上加了 static 關鍵字,那麼它就是一個靜态方法:

靜态方法屬于這個類而不是這個類的對象;

調用靜态方法的時候不需要建立這個類的對象;

靜态方法可以通路靜态變量。

/**
 * @author 微信搜「沉默王二」,回複關鍵字 PDF
 */
public class StaticMethodStudent {
    String name;
    int age;
    static String school = "鄭州大學";
    public StaticMethodStudent(String name, int age) {
        this.name = name;
        this.age = age;
    }
   
    static void change() {
        school = "河南大學";
    }
   
    void out() {
        System.out.println(name + " " + age + " " + school);
    }
    public static void main(String[] args) {
        StaticMethodStudent.change();
       
        StaticMethodStudent s1 = new StaticMethodStudent("沉默王二", 18);
        StaticMethodStudent s2 = new StaticMethodStudent("沉默王三", 16);
       
        s1.out();
        s2.out();
    }
}      

change() 方法是靜态方法,是以它可以直接方位靜态變量 school,把它的值更改為“河南大學”;并且,可以通過類名直接調用 change() 方法。

程式輸出結果如下所示:

沉默王二 18 河南大學

沉默王三 16 河南大學

1

2

靜态方法不能通路非靜态變量和調用非靜态方法。

教妹學Java(二十六):static 關鍵字解析(2)

“二哥,我想到了一個問題,為什麼 main 方法是靜态的啊?”沒想到,三妹串聯知識點的功力還是不錯的。

“如果 main 方法不是靜态的,就意味着 Java 虛拟機在執行的時候需要先建立一個對象才能調用 main 方法,而 main 方法作為程式員的入口,建立一個額外的對象顯得非常多餘。”我不假思索地回答令三妹感到非常的欽佩。

03、什麼是靜态代碼塊?

用一個 static 關鍵字,外加一個大括号括起來的代碼被稱為靜态代碼塊。

靜态代碼塊通常用來初始化一些靜态變量;

靜态代碼先于 main() 方法執行。

/**
 * @author 微信搜「沉默王二」,回複關鍵字 PDF
 */
public class StaticBlock {
    static {
        System.out.println("靜态代碼塊");
    }
    public static void main(String[] args) {
        System.out.println("main 方法");
    }
}      

靜态代碼塊

main 方法

“二哥,既然靜态代碼塊先于 main() 方法執行,那沒有 main() 方法的 Java 類能執行成功嗎?”三妹的腦回路越來越令我敬佩了。

“Java 1.6 是可以的,但 Java 7 開始就無法執行了。”我胸有成竹地回答到。

/**
 * @author 微信搜「沉默王二」,回複關鍵字 PDF
 */
public class StaticBlockNoMain {
    static {
        System.out.println("靜态代碼塊,沒有 main");
    }
}      

在指令行中執行 java StaticBlockNoMain 的時候,會抛出以下錯誤。

教妹學Java(二十六):static 關鍵字解析(2)

04、ending

“三妹,static 關鍵字我們就學到這裡吧,你還有什麼問題嗎?”三妹學習 Java 的勁頭讓我對她未來的程式設計生涯充滿了信心。

“沒有了,二哥,你講的挺棒的,我再去網上找一些資料學習下。”三妹還願意再去深入地學習,讓我很開心。