1. 程式人生 > >Java static關鍵字四種用法

Java static關鍵字四種用法

static關鍵字,是我們在java開發中必須掌握的關鍵字之一,不同的關鍵字有著不同的作用,在適合的環境下運用可以,可以提高程式的執行效能,優化程式的結構。
靜態成員的使用“類名.靜態成員”,從呼叫方式我們可以瞭解到,靜態成員肯定必須在我們呼叫前初始化好了的,那麼也就是說在類被載入時已經初始化好了,類被裝載到jvm虛擬機器後,不初始化static修飾的成員的話,就不能正確的使用類名去呼叫靜態成員了。當一個類被載入和例項化時,以下在jvm的記憶體儲存圖:
這裡寫圖片描述
如果是一個類裡面的靜態成員變數和靜態成員方法,它是儲存在方法區的,靜態成員變數是在方法區的靜態域裡面,而靜態成員方法是在方法區的class二進位制資訊裡面(.class檔案和方法區裡面的二進位制資訊不一樣,讀取.class檔案按照虛擬機器需要的格式儲存在方法區。這種格式包括資料結構方面),靜態成員和靜態成員方法使用時不用建立物件,即類載入初始化後就可以使用,並且是執行緒共享的。

通過圖中分析,很多問題也能夠迎刃而解,比如不同執行緒呼叫方法為什麼是執行緒安全的。區域性變數儲存在哪兒裡(棧中),成員變數儲存在哪兒裡(靜態成員變數儲存在方法區,非靜態成員變數儲存在堆區),為什麼區域性變數不能夠static修飾等(區域性變數儲存在棧區,在方法呼叫時不能夠自動初始化必須由程式設計師手動初始化,否則會報錯,歸根結底是由於static變數和區域性變數儲存的位置不一樣)。

static四種用法:

  • 修飾成員變數
public class Person1{
    public static name="nihao"
; } public calss Mytest{ public static void main(String[] args){ System.out.println(Person1.name); } }
  • 修飾成員方法
public class Person1{
    public static name="nihao";
    public static sayHello(){
      //靜態方法中不可使用this
      //靜態方法使用的變數和方法,必須是被static修飾
      System.out.println(name);
    }
}
public
calss Mytest{ public static void main(String[] args){ System.out.println(Person1.sayHello()); } }
  • 靜態程式碼塊
    可將多個類成員放在一起初始化。
public class Person1{
    //使用者登入狀態
    public static Map<Integer,String> S_RESULTCODE=new HashMap<Integer,String>();
    static{
        S_RESULTCODE.put(1001, "驗證成功");
        S_RESULTCODE.put(-1009, "金鑰驗證失敗");
        S_RESULTCODE.put(-1010, "資料型別異常");
        S_RESULTCODE.put(-1011, "驗證訊息響應失敗");
    }
}
  • 靜態導包
package com.bigbigbu.static;
public class Person1{
    public static name="nihao";
    public static sayHello(){
      //靜態方法中不可使用this
      //靜態方法使用的變數和方法,必須是被static修飾
      System.out.println(name);
    }
}
import static com.bigbigbu.static.Person1.*;
public calss Mytest{
    public static void main(String[] args){
     System.out.println(sayHello());
    }
}

上面的程式碼來自於兩個java檔案,其中的Person1很簡單,包含了一個用於sayHello的static方法。而在Mytest.java檔案中,我們首先將Person1類匯入,這裡在匯入時,我們使用了static關鍵字,而且在引入類的最後還加上了“.*”,它的作用就是將Person1類中的所有類方法直接匯入。不同於非static匯入,採用static匯入包後,在不與當前類的方法名衝突的情況下,無需使用“類名.方法名”的方法去呼叫類方法了,直接可以採用”方法名”去呼叫類方法,就好像是該類自己的方法一樣使用即可。

總結

static是java中非常重要的一個關鍵字,而且它的用法也很豐富,主要有四種用法:

  • 用來修飾成員變數,將其變為類的成員,從而實現所有物件對於該成員的共享;
  • 用來修飾成員方法,將其變為類方法,可以直接使用“類名.方法名”的方式呼叫,常用於工具類;
  • 靜態塊用法,將多個類成員放在一起初始化,使得程式更加規整,其中理解物件的初始化過程非常關鍵;
  • 靜態導包用法,將類的方法直接匯入到當前類中,從而直接使用“方法名”即可呼叫類方法,更加方便。

以上為博主查閱博文和資料的整合加入一些自己的理解希望對大家有所幫助。