【问题标题】:Clarification on separate sections of code inside one method with curly brackets用大括号对一种方法中的单独代码部分进行说明
【发布时间】:2013-11-21 14:44:12
【问题描述】:

在一个方法中使用不同的大括号部分编写代码是一种好习惯吗?

    public String getName()
    {
       String returnValue;

          {
             int a=0;
           --- 1 - 5 lines----
          }

          {
            int a=0;
           --- 6 -  10 lines----
          }

    return returnValue;

    }

如果这是一个好的做法,那么这是我的下一个问题。 我在方法中两次声明了相同的变量,但在块内。这是否意味着每个块占用单独的\额外的内存?我在这里吗?如果我错了,请纠正我。

【问题讨论】:

  • IMO 如果变量将在两个部分中声明和使用,只需在部分之前声明和初始化它。关于内存,让JVM来处理,不要在过早的优化中工作。
  • 您将遇到疯狂的范围问题。您已经在复制代码(初始化 int a 两次)。

标签: java performance


【解决方案1】:

所有变量都只能在它们定义的块内访问,例如

{
    int a=0;
    --- 1 - 5 lines----
}

a 变量只能在此块中访问。

  • 它占用更多内存吗?

    例如,这就像在循环中定义一个变量。您不必担心,因为内存管理几乎已传递给垃圾收集器。

  • 这是一个好习惯吗?

    有时这种方法会导致Code smells。就个人而言,我更愿意跳过这样的结构并想出有意义的名字。这对源代码的可读性很有好处,恕我直言。

【讨论】:

  • 感谢您的澄清!
【解决方案2】:

这样做不是一个好习惯

当您需要这样做时,这是迫切需要重构的标志,也就是 Martin Fowler 所说的“代码异味”

变量的范围仅限于该块,并且将在该块退出时被垃圾回收。

{
   int i = 0;
}
//the scope of i will end here and will be eligible for garbage collection

【讨论】:

    【解决方案3】:

    这通常不是最佳实践,因为它会降低代码的可读性。

    对于内存,每个块都有自己的范围,因此占用单独的内存。更具体地说,在执行完第一个块之后,范围被限制在块范围内的每个变量都可以被垃圾回收。

    【讨论】:

    • 感谢您的澄清!
    【解决方案4】:

    如果你觉得你需要这样的单独块,你可能应该考虑制作这样的块分离方法。

    我同意所有说这是一种不好的做法的人的观点。

    【讨论】:

    • 感谢您的澄清!
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2017-01-23
    • 1970-01-01
    • 2010-12-27
    相关资源
    最近更新 更多