Java中static的用法
在Java中,有一個使用頻率非常高的關鍵字——static,那麼大家知道它的用法嗎?下面我們一起來了解一下它吧。
1、static的用法:
static可以用來修飾成員變數、成員方法以及程式碼塊等,被static關鍵字修飾的成員都會具備一些特殊屬性。
2、static修飾成員變數:
被static修飾的成員變數叫做靜態變數。靜態變數具有以下兩個特徵:
a.靜態變數的資料被本類中所有例項物件所共享;
b.如果該靜態變數的訪問許可權高於private,則該靜態變數可通過“類名.變數名”直接訪問。
下面通過簡單的例項來驗證一下:
定義一個學生類:
public class Student {
static String school="CSU";
}
定義一個測試類:
public class Test {
public static void main(String[] args) {
// 通過“類名.變數”名呼叫靜態變數
System.out.println("Student.school:" + Student.school);
// 建立學生物件
Student s1 = new Student();
Student s2 = new Student();
// 輸出例項物件靜態變數屬性
System.out.println("s1.school:" + s1.school + "-----"+"s2.school:" + s2.school);
// 修改其中一個例項物件的靜態變數屬性
s1.school = "HNU";
// 輸出例項物件靜態變數屬性
System.out.println("s1.school:" + s1.school + "-----"+"s2.school:" + s2.school);
}
}
輸出結果:
輸出結果基本驗證了上述說法。值得注意的是,因為被static修飾的變數其值被類中所有例項物件所共享,所以其中任意一個例項物件修改了靜態變數值,其它例項物件該靜態變數值也會被修改。從儲存的角度來說,系統在記憶體中只為類中的靜態變數提供了一份資料,而未在類中各例項物件所佔有的記憶體空間中再建立該變數。
注:訪問許可權:public>protected>default(一般省略)>private。
3、static修飾成員方法:
在類中,被static修飾的方法稱作靜態方法。同靜態變數一樣,如果該靜態方法的訪問許可權高於private,則該靜態方法可通過“類名.方法名”直接呼叫,而不需要建立物件呼叫。
下面也通過一個例項來看一下:
定義另一個學生類:
public class Student1 {
static void study() {
System.out.println("學習中");
}
}
定義測試類:
public class Test1 {
public static void main(String[] args) {
Student1.study();
}
}
輸出結果:
需要注意的是,靜態方法只能訪問被static修飾的成員,其原因就在於靜態方法不需要建立物件就可以被呼叫。
4、static修飾程式碼塊:
在java中,被static修飾的程式碼塊被稱作靜態程式碼塊。靜態程式碼塊在類被載入時,就會被執行,並且只會執行一次(類只會載入一次)。詳見例項:
定義一個學生類:
public class Student2 {
static{
System.out.println("靜態程式碼塊");
}
public void showName (String name){
System.out.println(name);
}
}
定義一個測試類:
public class Test2 {
public static void main(String[] args) {
Student2 s1=new Student2();
Student2 s2=new Student2();
s1.showName("張三");
s2.showName("李四");
}
}
輸出結果:
根據輸出結果,靜態程式碼塊僅被執行一次,並且在類載入時就開始執行,優先於類中的方法。
好了,關於static關鍵字的用法暫時就介紹到這了(目前也只知道這些用法~)。