首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >静态成员初始化的静态块与私有静态方法

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

Stack Overflow用户
提问于 2012-07-24 02:48:18
回答 3查看 2.1K关注 0票数 12

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

静态数据块初始化:

代码语言:javascript
复制
private static int NUM_ITER;
static {
    // Operations
    NUM_ITER = //val from above operations.
}

私有静态方法初始化:

代码语言:javascript
复制
private static int NUM_ITER = calculateNumIter();

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

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

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

谢谢,

EN

回答 3

Stack Overflow用户

发布于 2012-07-24 02:50:42

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

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

票数 3
EN

Stack Overflow用户

发布于 2012-07-24 03:04:28

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

  • 如果初始化只有一行,最多两行,非常简单的代码,那么就使用静态块;
  • 如果初始化是一个复杂的操作,那么名字好的方法将是最好的;
  • 如果有疑问,请使用方法语法,并使用方法名来声明变量以及初始化的方式(即initializeValueWithRandomNumber() );
票数 2
EN

Stack Overflow用户

发布于 2012-07-24 02:56:39

  1. static Initializer块(您的1选项)在JVM装入类时执行,甚至在初始化任何static变量之前的都是一次拥有所有静态变量的好地方。
  2. 您的第二个选项可以通过向初始化方法的参数传递多个参数,选择性地用于初始化多个 static变量。

<static>G214

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11618551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档