何时使用初始化器?

时间:2013-08-07 20:00:56

标签: java static initializer static-initialization static-initializer

我最近遇到了以下一些java语法:

static {
... 
}

显然这被称为“静态初始化器”(参见Static Block in Java)并且“在加载类时执行”。 应该何时使用静态初始化程序?与以通常的方式初始化变量相比,它的优点和缺点是什么?

1 个答案:

答案 0 :(得分:1)

正如评论和链接帖子中所提到的,当静态初始化需要的逻辑不仅仅是为静态字段赋值时,它非常有用,例如:

public class MediocreExample {

    static List<String> strings = new ArrayList<String>();

    static {
        strings.add("first");
        strings.add("second");
    }

}        

有些替代品不使用初始化块:

public class MediocreExample {

    static List<String> strings = createInitialList();

    private static List<String> createInitialList () {
        List<String> a = new ArrayList<String>();
        a.add("first");
        a.add("second");
        return a;
    }

}

使用非初始化程序替代方案并没有真正令人信服的理由 - 因为您可以看到初始化程序版本非常清晰和简洁 - 但我将其包括在内以说明一点:不要进行设计盲目地做出决定,知道你为什么选择你选择的选项。

有时没有像这样的方便替代品,例如如果目标是在静态初始化时将某些内容打印到控制台:

public class MediocreExample {

    static {
        System.out.println("MediocreExample static init."); 
    }    

}

还有其他方法可以生成等效代码,但这是最干净的。

但是像往常一样,使用最合适的方式,提供最清晰,最易于维护的代码。语言是表达想法,清楚地说出(打字)的一种方式。

相关问题