5

我最近阅读了一些使用特殊语法的代码{},我问过一位更有经验的 Java 开发人员,但他也无法回答。

public void doSomething() {
    someWorks();
    {
        someVariables;
        someMoreWorks();
    }
    someEvenWorks();
    {
        ...
    }
}

为什么代码作者将这些行放在里面{}{}我猜在执行退出后将立即释放其中声明的变量{},对吧,因为我不能再在外面访问这些{}了?

4

3 回答 3

6

是的,唯一的区别是范围。

有时,这对于一次性代码(例如微基准测试)很有用,您希望能够剪切和粘贴块并进行微小更改,然后可能对块进行重新排序。

不过,我很少(如果有的话)在“真实”代码中有这样的东西。

于 2011-09-07T13:49:00.147 回答
4

这给了他一个嵌套范围来声明“更多本地”变量。

我猜想 {} 中声明的变量会在退出 {} 后立即释放,对吧,因为我不能再在 {} 之外访问这些变量了?

取决于您对“释放”的定义(在方法结束之前,它们很可能不会被垃圾收集,因此如果这很重要,您可能希望将它们清空),但是是的。

花括号的其他很少见的用途包括类和实例初始化器:

class A {
   static {
      // some class initialization code
   }

   {
      // some instance initialization code
   }

 }
于 2011-09-07T13:49:41.443 回答
1

作者将这些变量放在 {} 中的事实表明,这些变量的范围仅是 {} 定义的方法的范围;反过来,一旦方法完成执行,这些变量将用于垃圾收集。

于 2011-09-07T13:54:43.093 回答