java中的static

        大家都知道,我們可以基於一個類創建多個該類的對象,每個對象都擁有自己的成員,

互相獨立,然而在某些時候,我們更希望該類所有的對象共享同一個成員,此時就是

 static 大顯身手的時候了。

        Java 中被 static 修飾的成員稱爲靜態成員或類成員。它屬於整個類所有,而不是

某個對象所有,即被類的所有對象所共享。靜態成員可以使用類名直接訪問,也可以

使用對象名進行訪問。當然,鑑於他作用的特殊性更推薦用類名訪問~~


使用 static 可以修飾變量、方法和代碼塊。


一:static使用之靜態變量

    例如,我們在類中定義了一個靜態變量 className ,操作代碼如下所示:

    public class HelloWorld {
    
       // 定義靜態變量,保存班級名稱
static  String className = "JAVA開發一班";

        public static void main(String[] args) {
        
// 訪問靜態變量,通過類名直接訪問
System.out.println( HelloWorld.className  );
        //創建類的對象
        HelloWorld hello=new HelloWorld();
        //使用對象名訪問靜態變量
        System.out.println( hello.className  );
}
}

注意:

靜態成員屬於整個類,當系統第一次使用該類時,就會爲其分配內存空間直到該類被卸載纔會進行資源回收!~~

二:static使用之靜態方法

   

與靜態變量一樣,我們也可以使用 static 修飾方法,稱爲靜態方法或類方法。其實之前我們

一直寫的main 方法就是靜態方法。靜態方法的使用如:

public classHelloWorld {

   

    // 使用static關鍵字聲明靜態方法

    public static void print(){

       

        System.out.println("歡迎您:xxx!");

    }

 

 

  publicstaticvoidmain(String[] args){

    //使用類名直接調用靜態方法

      HelloWorld.print();

     //使用對象名調用靜態方法

      HelloWorld hello=new HelloWorld();

      hello.print();

    }

}


需要注意:

 1.靜態方法中可以直接調用同類中的靜態成員,但不能直接調用非靜態成員,如果希望在

   靜態方法中調用非靜態變量,可以通過創建類的對象,然後通過對象來訪問非靜態變量。

 2.在普通成員方法中,則可以直接訪問同類的非靜態變量和靜態變量。

 3.

靜態方法中不能直接調用非靜態方法,需要通過對象來訪問非靜態方法。



三:static使用之靜態初始化塊

    

Java 中可以通過初始化塊進行數據賦值。如:

   

  public classHelloWorld {

   

    Stringname;//定義一個成員變量

    {//通過一個初始化塊爲成員變量賦值

        name="xxx";

    }

}

在類的聲明中,可以包含多個初始化塊,當創建類的實例時,就會依次執行這些代碼塊。如果使用 static 修飾初始化塊,就稱爲靜態初始化塊

需要特別注意:靜態初始化塊只在類加載時執行,且只會執行一次,同時靜態初始化塊只能給靜態變量賦值,不能初始化普通的成員變量

我們來看一段代碼:

 

public classHelloWorld {

   

     String name; // 聲明變量name

        Stringsex;// 聲明變量sex

        static int age;// 聲明靜態變量age

       

        // 構造方法

        public HelloWorld  () {

            System.out.println("通過構造方法初始化name");

            name = "tom";

        }

       

        // 初始化塊

        {

            System.out.println("通過初始化塊初始化sex");

            sex = "";

        }

       

        // 靜態初始化塊

         static {

            System.out.println("通過靜態初始化塊初始化age");

            age = 20;

        }

       

        public void show() {

            System.out.println("姓名:" + name + ",性別:" + sex + ",年齡:" + age);

        }

       

        public static void main(String[] args) {

           

            // 創建對象

            HelloWorldhello= newHelloWorld();

            // 調用對象的show方法

            hello.show();

     

        }

}

 運行結果如下:

  通過靜態初始化塊初始化age

   通過初始化塊初始化sex

   通過構造方法初始化name

   姓名:tom,性別:男,年齡:20


  通過輸出結果,我們可以看到,程序運行時靜態初始化塊最先被執行,然後執行普通初始化塊,

  最後才執行構造方法。由於靜態初始化塊只在類加載時執行一次,所以當再次創建新的對

  象時並未執行靜態初始化塊。





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