2013-11-28 34 views
0

我不確定這是幹什麼的,我以前沒見過它,也找不到任何有關它的信息。這個單一靜態方法有什麼作用?

private static String[] names = { "A.ttf" }; 

private static Map<String, Font> cache = new ConcurrentHashMap<String, Font>(names.length); 

static { 
    for (String name : names) { 
    cache.put(name, getFont(name)); 
    } 
} 
+1

這是一個[靜態初始化](http://docs.oracle.com/javase/tutorial/java /javaOO/initial.html)。您可以使用它來初始化靜態字段。 – Zong

回答

1
  1. 。放置的static關鍵字表示它是一個static塊。 static塊被稱爲Static Initializers而非靜態塊被稱爲Instance Initializers

  2. 它們都不能包含return語句。

  3. 將在每次創建新實例時調用non-static塊,它將在構造函數之前調用/執行。 static區塊將爲,只需調用/執行一次,這將是您第一次訪問該課程。

實施例:

class A { 
    static{ // static 
     System.out.println("Static block of Class A"); 
    } 

    { // non-static 
     System.out.println("Non-Static block of a instance of Class A"); 
    } 
    public A(){ 
    System.out.println("Constructing object of type A"); 
    } 
} 

public class StaticTest { 
    public static void main(String[] args) { 
    A a1 = new A(); 
    A a2 = new A(); 

    } 
} 

輸出:

static block of Class A 
Non-Static block of a instance of Class A 
Constructing object of type A 
Non-Static block of a instance of Class A 
Constructing object of type A 
5

這不是一個靜態方法,而是一個靜態塊。

當類加載並通常用於初始化事件時,首先執行靜態塊(按聲明它們的順序)。

在你的情況下,它將所有名稱放入「名稱」中進行緩存。

參閱thisan answer on SO用於A嵌段是由{\\some code}表示詳細信息

+0

編輯答案,感謝您的更正 –

相關問題