我不确定这是做什么的,我以前没见过,也找不到任何有关它的信息。
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));
}
}
答案 0 :(得分:5)
这不是静态方法,而是静态块。
当类被加载并且通常用于初始化事物时,首先执行静态块(以声明它们的相同顺序)。
在你的情况下,它将“名称”中的所有名称都缓存。
请参阅this或an answer on SO了解详情
答案 1 :(得分:1)
块由{\\some code}
表示。已放置的static
关键字表示它是static
块。 static
块称为Static Initializers
,非静态块称为Instance Initializers
。
它们都不能包含return语句。
每次创建新实例时都会调用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