java中static關鍵字主要有兩種作用:
第一:為某特定資料型態或物件指派單一的儲存空間,而與建立物件的個數無關。
第二,實作某個方法或屬性與類別而不是物件關聯在一起
簡單來說,在Java語言中,static主要有5中使用情況:成員變數、成員方法、程式碼區塊,內部類別和靜態導包。
基本用法:
static修飾成員變數:此成員變數屬於類別變量,可以透過ClassName.attributeName 直接引用,而不需要new出類別的實例。
static修飾成員方法:方法屬於類別的方法,可以透過 ClassName.methodName 直接引用,而不需要new出類別的實例。
static修飾程式碼區塊:僅在類別初始化的時候執行一次,且載入順序是嚴格按照類別中靜態資源的定義順序來載入的;靜態程式碼區塊對於定義在它之後的靜態變數,可以賦值,但是不能存取。 ;父類別程式碼區塊->子類別程式碼區塊。
static修飾內部類別:static無法修飾普通類,只能修飾內部類,被static修飾的內部類別的創建方式: new OuterClass.InnerClass()。
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中文網其他相關文章!