static 關鍵字的作用
阿新 • • 發佈:2018-12-07
Static關鍵字
java中的static關鍵字主要用於記憶體管理。我們可以應用java static關鍵字在變數,方法,塊和巢狀類中。 static關鍵字屬於類,而不是類的例項。
static關鍵字可以修飾
變數
如果將一個變數宣告為static,它就是所謂的靜態變量了,靜態變數可以用於引用所有物件的公共屬性。它能使程式儲存器高效(即它節省記憶體)。例如id計數。
eg1:公共屬性
class Student { int id; String name; static String college = "xiangTanUnverisity"; Student8(int r, String n) { rollno = r; name = n; } void display() { System.out.println(rollno + " " + name + " " + college); } public static void main(String args[]) { Student8 s1 = new Student8(111, "Karan"); Student8 s2 = new Student8(222, "Aryan"); s1.display(); s2.display(); } }
輸出結果
111 Karan ITS
222 Aryan ITS
id自增示例:
如果不是靜態變數
class Counter { int id = 0; Counter() { id++; System.out.println(id); } public static void main(String args[]) { Counter c1 = new Counter(); Counter c2 = new Counter(); Counter c3 = new Counter(); } }
輸出結果
1
1
1
如果是靜態變數
class Counter2 {
static int id = 0;
Counter2() {
id++;
System.out.println(id);
}
public static void main(String args[]) {
Counter2 c1 = new Counter2();
Counter2 c2 = new Counter2();
Counter2 c3 = new Counter2();
}
}
輸出結果
1
2
3
從而引出記憶體儲存位置圖:
方法
靜態方法有一下特性
- 靜態方法屬於類,而不屬於類的物件。
- 可以直接呼叫靜態方法,而無需建立類的例項。
- 靜態方法可以訪問靜態資料成員,並可以更改靜態資料成員的值。
靜態方法的限制
- 靜態方法不能直接使用非靜態資料成員或呼叫非靜態方法。
- 靜態方法不能使用this和super。
class A {
int a = 40;// non static
public static void main(String args[]) {
System.out.println(a);
}
}
輸出結果
[編譯錯誤!]Compile Time Error
如果將a修飾為靜態變數則輸出結果為:
static int a = 40;
40
程式碼塊
作用
- 初始化靜態資料成員
- 在main方法之前就執行
eg:
class A2 {
static {
System.out.println("static block is invoked");
}
public static void main(String args[]) {
System.out.println("Hello main");
}
}
輸出順序為:
static block is invoked
Hello main
內部類
根據Oracle官方的說法:
Nested classes are divided into two categories: static and non-static.
Nested classes that are declared static are called static nestedclasses.
Non-static nested classes are called inner classes.
從字面上來說,一個是靜態鑲嵌內部類,一個是內部類。
此處直降static關鍵字,不深究,可以隨時去官網檢視:Nested Classes