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
靜态方法不能通路非靜态變量和調用非靜态方法。
“二哥,我想到了一個問題,為什麼 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 的時候,會抛出以下錯誤。
04、ending
“三妹,static 關鍵字我們就學到這裡吧,你還有什麼問題嗎?”三妹學習 Java 的勁頭讓我對她未來的程式設計生涯充滿了信心。
“沒有了,二哥,你講的挺棒的,我再去網上找一些資料學習下。”三妹還願意再去深入地學習,讓我很開心。