2012-05-22 39 views
3

我從來沒有見過這個 - 它叫什麼?這是一個類級變量,位於文件的開頭。變量聲明後的靜態塊是什麼?

只是要說清楚,我指的是變量後的static {}

private static final UriMatcher URI_MATCHER; 
    static { 
     URI_MATCHER = new UriMatcher(UriMatcher.NO_MATCH); 
     URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY, SEARCH); 
     URI_MATCHER.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH); 
     URI_MATCHER.addURI(AUTHORITY, "books", BOOKS); 
     URI_MATCHER.addURI(AUTHORITY, "books/#", BOOK_ID); 
    } 
+1

可能的複製也許http://stackoverflow.com/questions/2943556/static-block-in-java – RanRag

回答

4

這是一個靜態的初始化塊。它可以在類中的任何地方聲明(但是在方法之外),但是按照慣例,它通常是在被初始化的靜態變量之後編寫的。它在Java語言規範section §8.7中指定。

顧名思義,它通常用於在類加載時初始化類中靜態屬性的狀態。從Java tutorial

靜態初始化塊是包圍在括號{}的代碼正常塊,並且由靜態關鍵字(...)一個類可以具有任何數量的靜態初始化塊的前面,並且他們可以出現在課堂的任何地方。運行時系統保證靜態初始化塊按它們出現在源代碼中的順序被調用。

+0

+1的JLS引用。 –

0

後,這是一個static initialization block是initialices靜止無功URI_MATCHER代碼的靜態部分。它允許你「設置」你的靜態字段,這在實例的方法中無法正確完成。

2

用於初始化靜態變量。正如你所知道的,你不能在你的類的構造函數中初始化它們,所以你可以使用static塊 作爲一個例子: 你想填充值爲1,2,3的靜態數組等等。有兩種方式:

public class Main { 
    static int[] array1 = {1, 2, 3, 4 ...}; 

    static int[] array2; 
    static { 
     array2 = new int[N]; 
     for (int i = 0; i < N; i++) { 
      array2[i] = i; 
     } 
    } 
} 
+1

如果您先將一個數組值賦給'array2',它可能會有所幫助:-) – rsp

相關問題