關於靜態成員或靜態方法

       我們在聲明屬性或方法的時候經常會使用關鍵字static(靜態的),那麼什麼時候該使用這個關鍵字,什麼時候不用這個關鍵字呢?

      關鍵字static允許成員變量或方法不與類的特定實例關聯,類屬性與類有關,他所修飾的變量是全類共享的屬性, 而不是類的某個實例.比如編寫如下程序:


public class St {

 private static String name;
 private int age;
 
 public static void main(String[] args) {
    
  St s1=new St();
  St s2=new St();
  s1.name="zhangsan";
  s2.name="lisi";
  System.out.println("s1.name= "+s1.name);
  System.out.println("s2.name= "+s2.name);
 }

}

運行結果:

s1.name= lisi
s2.name= lisi
       從結果可以看出,雖然實例化了兩個St對象,並賦值,但是由於變量name是靜態的,故修飾的變量是全類共享的屬性,只要一個改變,所有的就要跟着改變.

        很多時候,我們也把常量屬性聲明爲static格式的,如:public static final float PI=3.1415;      

       一般地,類的靜態成員被稱爲類成員.類方法所修飾的方法一般都是工具類的工具方法.被static聲明的成員變量或方法都被認爲是全局的,其他任何類可以直接訪問靜態的成員變量或調用靜態方法,而不需要實例化一個對象.   非靜態的成員變量和方法被稱爲實例成員.

        靜態方法和靜態成員變量不能使用引用來訪問,引用是類的是理論,而我們不需要類的實例化來訪問靜態成員,直接使用類名.成員變量(或成員方法).

       由於static屬性或方法先被類加載器加載,故靜態方法不能訪問非靜態的方法或屬性(即實例化成員),只能訪問靜態屬性或方法,而非靜態方法可以訪問靜態方法.

        static除了聲明靜態成員變量和方法外,還有另外一種用法,Java類包含了一個靜態初始化塊,靜態初始化塊是一組當子類被JVM的類加載器加載時執行的語句.比如:

public class Radio {
 private int station;


 public Radio(int x){
  System.out.println("正在構造一個收音機對象");
  station=x;
 }
 
 static{      //靜態初始化塊格式
  System.out.println("在靜態初始化塊內");   //運行時就開始加載
  
 }
 
 public static void main(String[] args) { 
  System.out.println("在main方法內");
  Radio r1=new Radio(2);
  Radio r2=new Radio(8);
 }

運行結果:

在靜態初始化塊內
在main方法內
正在構造一個收音機對象
正在構造一個收音機對象

       從上面可以看出,儘管實例化了兩個對象,但是類的靜態初始化塊只能被加載一次.

       這個和實例化塊有點不一樣,實例化塊是類的對象每次實例化一次時就執行一次,而且是在任何父類構造器調用之後,在子類構造器調用之前執行.

    

      

       

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章