12

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

静态块初始化:

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.
}

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

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

谢谢,

4

3 回答 3

3

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

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

于 2012-07-23T18:50:42.247 回答
2

我建议使用任何语法来保持你的代码干净和可读:

  • 如果初始化数量为 1 行,最多 2 行,非常简单的代码行,则使用静态块;

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

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

于 2012-07-23T19:04:27.773 回答
1
  1. static Initializer块(您的 1 选项)在 JVM 加载类时执行,甚至初始化任何static变量之前。

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

  3. 您的第二个选项可用于通过将多个参数传递给初始化方法的参数来初始化多个变量。 static

于 2012-07-23T18:56:39.403 回答