java學習之static關鍵字
阿新 • • 發佈:2020-12-30
技術標籤:java
static關鍵字
用static修飾成員變數的好處在於解決記憶體浪費問題。當每個物件中有相同屬性及屬性值時,每建立一次物件,這些相同的屬性就會隨著物件的建立而存在於物件的記憶體空間,造成了冗餘。用static修飾後,就會節省物件的記憶體空間。
用static修飾成員方法,可直接通過 類名.方法名 來呼叫。主要為了避免new物件來呼叫方法的繁瑣,節省資源消耗。
1.static 可修飾屬性,方法,程式碼塊,內部類。
2.static修飾屬性:
- 靜態屬性會隨著類的載入而載入,所以靜態變數的存在優先於物件的存在。
- 靜態變數會被該類所有物件所共享,一旦某個物件更改了此靜態變數的值,則所有物件的該屬性值都會隨之改變
- 靜態變數可由類名直接呼叫
3.static修飾的方法:
- 靜態方法會隨著類的載入而載入,也是優先於物件而存在,由於this和super均指代物件,所以靜態方法中不能使用this,super。
- 靜態方法中可以使用靜態成員,但不能使用非靜態成員
- 靜態方法可直接由類名呼叫
//此程式碼主要演示了編號自動增加,和nation屬性值共享的應用
//若id是非靜態,則每次建立一個物件,id初始值都為0,達不到累加效果
class Test{
public static void main(String[] args){
Person.nation="中國";//直接通過類名賦值
Person per1= new Person("張三");
Person per2=new Person("李四");
Person per3=new Person("王五");
System.out.println("編號為:"+per1.getNextNum()+per1);
System.out.println("編號為:"+per2.getNextNum()+per2);
System.out.println("編號為:" +per3.getNextNum()+per3);
}
}
class Person{
private String name;//非靜態方法
static int id=0;
static String nation;//國家屬性,要建立的物件國家都為中國,則將其定義為靜態變數直接呼叫
/*
此處是無參全參構造器和setter/getter,省略沒寫
*/
public Person(String name){this.name=name;}//此構造器用來傳姓名值
public static int getNextNum(){//獲取編號,每建立一次物件就讓編號加1,可自動獲取編號功能
return id+=1;
}
public String toString(){//重寫Object類中的toString()方法,可通過列印物件名直接打印出屬性值
return "姓名是:"+this.name+" 國家是:"+nation;
}
}
執行結果:
4.靜態程式碼塊:static{ }
- 隨著類的載入而載入,並只執行一次。
- 靜態程式碼塊優先於非靜態程式碼塊存在。
- 靜態程式碼塊中只能使用靜態變數,靜態方法。
- 不能使用this和super。
- 靜態程式碼塊可以有多個,順序執行。
5.(擴充套件)非靜態程式碼塊(初始化塊,{ } )
- 每次建立物件時執行
- 通常為多個構造器的共性內容進行初始化。它的執行優先於構造器
- 可以有多個非靜態程式碼塊,順序執行