静态块与私有静态方法,用于静态成员初始化

2022-09-04 22:56:43

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

静态块初始化:

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

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

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

谢谢


答案 1

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

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


答案 2

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

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

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

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