java中static關鍵字的作用


 

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;
    }
}  

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

 

碼字不易,尊重原創,轉載請注明:http://www.cnblogs.com/adeng/p/6971366.html 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM