这种单一的静态方法有什么作用?

时间:2013-11-28 18:09:21

标签: java fonts static

我不确定这是做什么的,我以前没见过,也找不到任何有关它的信息。

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

2 个答案:

答案 0 :(得分:5)

这不是静态方法,而是静态块。

当类被加载并且通常用于初始化事物时,首先执行静态块(以声明它们的相同顺序)。

在你的情况下,它将“名称”中的所有名称都缓存。

请参阅thisan answer on SO了解详情

答案 1 :(得分:1)

  1. 块由{\\some code}表示。已放置的static关键字表示它是static块。 static块称为Static Initializers,非静态块称为Instance Initializers

  2. 它们都不能包含return语句。

  3. 每次创建新实例时都会调用non-static块,它将在构造函数之前调用/执行static块只会被调用/执行一次,这将是您第一次访问该类。

  4. 示例:

      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