首頁 >Java >java教程 >java中static關鍵字的詳細介紹

java中static關鍵字的詳細介紹

零下一度
零下一度原創
2017-06-25 11:03:521727瀏覽

 

java中static關鍵字主要有兩種作用:

第一:為某特定資料型態或物件指派單一的儲存空間,而與建立物件的個數無關。

第二,實作某個方法或屬性與類別而不是物件關聯在一起

簡單來說,在Java語言中,static主要有5中使用情況:成員變數、成員方法、程式碼區塊,內部類別和靜態導包。

基本用法:

  1. static修飾成員變數:此成員變數屬於類別變量,可以透過ClassName.attributeName 直接引用,而不需要new出類別的實例。

  2. static修飾成員方法:方法屬於類別的方法,可以透過 ClassName.methodName 直接引用,而不需要new出類別的實例。

  3. static修飾程式碼區塊:僅在類別初始化的時候執行一次,且載入順序是嚴格按照類別中靜態資源的定義順序來載入的;靜態程式碼區塊對於定義在它之後的靜態變數,可以賦值,但是不能存取。 ;父類別程式碼區塊->子類別程式碼區塊。

  4. static修飾內部類別:static無法修飾普通類,只能修飾內部類,被static修飾的內部類別的創建方式: new OuterClass.InnerClass()。

  5. static導入套件:語法“import static java.lang.Math.*”,這樣在類別中就可以直接使用Math類別中的靜態方法而不需要寫類別名,個人認為,在頻繁使用某個類別的時候比較方便,但是降低了可讀性。且不建議導入*

下面分別舉例說明static的各種用法

static修飾成員變數與成員方法

  幾個結論:

/**
 *
 * Created by ascend on 2017/6/9 13:51. */public class Test {public static void main(String[] args) throws ClassNotFoundException {
        Class.forName("net.liebao.test.A");
    }
}class A {static {
        System.out.println("A.static initializer");
    }public A() {
        System.out.println("A.A");
    }
}

#輸出:

A.static initializer

  結論一:靜態資源屬於類,但是獨立於類,靜態資源在類別初始化的時候被載入(早於new),例如透過:Class.forName(“xxx”)可以載入一個類別的靜態資源,但是沒有new。

 

  結論二:靜態資源(靜態成員變量,靜態成員方法,下同)不能存取非靜態資源,非靜態資源是new時候才會產生,所以不能訪問,反之,非靜態資源則可以存取靜態資源。

 

#  結論三:靜態資源可以存取靜態資源,但是需要注意的是,靜態資源可以為定義在它之後的靜態資源賦值,但是不能存取定義在它之後的靜態資源

另一個常見的用途是static實作單例模式

  我們都知道,單例模式的特點是該類別只能有一個實例,為了實現這一功能,必須隱藏類別的建構函數,即把建構函數宣告為private,並提供一個創建對象的方法,由於構造對像被聲明為private,外界無法直接創建這個類型的對象,只能通過該類提供的方法來獲取類的對象,要達到這樣的目的只能把創建物件的方法宣告為static,程式實例如下:

class Singleton {private static Singleton instance = new Singleton();//私有化构造函数private Singleton(){}public static Singleton getInstance(){return instance;
    }
}  

 上面的單例模式是餓漢模式;

 

以上是java中static關鍵字的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn