静块VS静态成员初始化
私有静态方法的静态变量可以与私有静态方法或用静块进行初始化。两者之间有什么细微差别?有什么情况我不能使用静态方法来初始化静态成员?我发现后者更具可读性。静块VS静态成员初始化
静块初始化:
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我学到私人静态方法有优势的静态块。
感谢,
静态块将是必要的(或至少是有用的),如果两个不同的变量是interdependant并且不能独立地初始化。
假设你需要从文件中读取两个值,例如。您可以将这两个值存储在其他对象中。但是如果你真的需要两个常量,一个静态块是有用的。
因此,这里静态方法可以替代静态块。 – Mohan 2012-07-23 18:53:47
如果第二个是从第一个派生的,那么这将起作用。但是,如果两者都来源于单一的价值,那就不是。例如,假设您需要从文件中读取两个值。 – 2012-07-23 18:56:51
是的,但是如果你的第一个静态方法也接受你的第二个静态成员为arg呢? – LastStar007 2012-07-23 18:56:55
static Initializer
块(你的选项1)执行时JVM装载该类,甚至之前任何static
变量被初始化。它的一个好地方,拥有所有的静态变量的一次。
通过将多个参数传递给初始化方法的参数,您可以选择使用第二个选项初始化多个
static
变量。
在我的示例中,将在JVM初始化期间调用calculateNumIter()。不是吗? – Mohan 2012-07-23 19:20:53
雅......它会...... – 2012-07-23 19:23:32
我会建议使用任何语法保持了代码干净和可读性:
如果初始化达一个,最多两个代码非常简单的线条,然后用静态块去;
如果初始化是一个复杂的操作,那么一个好名字将是最好的方法;
有疑问,请使用方法语法并使用方法名来声明不仅是哪个变量,而且还要声明如何初始化(即initializeValueWithRandomNumber());
自从我使用版本2以来,我已经为静态块遗忘了几次静态;)。 – Stefan 2012-07-23 20:34:21