-4

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

static {
... 
}

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

4

1 回答 1

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

}

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

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

于 2013-08-07T20:10:38.387 回答