1. Static關鍵字
1.1 靜態方法
用static標記的方法被稱爲靜態方法。
-
靜態方法在調用的時候不需要實例化對象
-
靜態方法直接通過類的名稱來調用的
-
靜態方法內部只能調用靜態變量和其他靜態方法,但是非靜態方法可以調用靜態方法
-
靜態方法中不能使用this
-
靜態方法不能自動銷燬,自建立開始靜態方法一直存在內存中,直到JVM關閉
-
子類在調用之前,父類中所有的靜態方法都會執行
靜態方法的本質是共享代碼段,類中的靜態方法和靜態變量在創建後共用一塊內存
1.2 靜態變量
靜態變量在類被加載的時候就初始化了,在該類的任何靜態方法執行之前就初始化,類的所有實例對象共享同一個靜態變量
靜態變量的本質是共享數據段,所以一旦改變一個對象中靜態變量的值後,其所有實例對象的該變量值也會隨之改變
用一個例子來說明靜態方法的執行:
public class StaticSuper {
static {
System.out.println("super static block");
}
StaticSuper() {
System.out.println("super constructor");
}
}
public class StaticTest extends StaticSuper {
static int rand;
static {
rand = (int) (Math.random()*6);
System.out.println("static block"+rand);
}
StaticTest(){
System.out.println("constructor");
}
public static void main(String[] args) {
/*
在子類的main方法執行之前,會先執行父類中的靜態方法,然後執行子類中的靜態方法
super static block
static block3
*/
System.out.println("main");
StaticTest staticTest = new StaticTest();
// 先執行父類構造方法,然後執行子類構造方法
// 輸出super constructor constructor
}
}
2. final關鍵字
final關鍵字表示最終的意思,即不能再被修改
-
final修飾的變量不能被修改
-
final修飾的方法不能被重寫
-
final修飾的類不能被繼承
如果一個類已經標記爲final,不能其方法就不需要再被標記爲final