1. 程式人生 > 其它 >java學習之static關鍵字

java學習之static關鍵字

技術標籤: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.(擴充套件)非靜態程式碼塊(初始化塊,{ } )

  • 每次建立物件時執行
  • 通常為多個構造器的共性內容進行初始化。它的執行優先於構造器
  • 可以有多個非靜態程式碼塊,順序執行