静态块与静态成员初始化的私有静态方法

时间:2012-07-23 18:48:18

标签: java methods static-methods

静态变量可以使用私有静态方法或静态块进行初始化。这两者之间有什么微妙的区别吗?有没有我不能使用静态方法初始化静态成员的情况?我发现后者更具可读性。

静态块初始化:

private static int NUM_ITER;
static {
    // Operations
    NUM_ITER = //val from above operations.
}

私有静态方法初始化:

private static int NUM_ITER = calculateNumIter();

// Some method comment on how we are calculating.
private static int calculateNumIter()
{
    // Operations.
    return //value_from_operations.
}

我更喜欢第二个,因为它更具可读性。有没有我必须先使用的情况(静态块)?

初始化静态成员(最终成员和变量成员)的最佳编码约定/设计是什么?即使从这个thread我学到的私有静态方法也比静态块有优势。

感谢,

3 个答案:

答案 0 :(得分:3)

如果两个不同的变量是相互依赖的并且不能独立初始化,则静态块是必要的(或至少是有用的)。

例如,假设您需要从文件中读取两个值。您可以将这两个值存储在另一个对象中。但是如果你真的想要两个常量,静态块是有用的。

答案 1 :(得分:2)

我建议使用任何语法来保持代码清洁和可读:

  • 如果初始化达到一个,最多两个,非常简单的代码行,那么请使用静态块;

  • 如果初始化是一个复杂的操作,那么一个名字好的方法将是最好的;

  • 有疑问,请使用方法语法并使用方法名称不仅声明哪个变量,还要声明初始化方式(即initializeValueWithRandomNumber());

答案 2 :(得分:1)

  1. static Initializer阻止(你的1选项)在JVM加载类时执行,甚至任何static变量初始化之前。

  2. 这是一次拥有所有静态变量的好地方。

  3. 您可以选择通过将多个参数传递给初始化方法的参数来初始化多个 static变量。