Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的{code}单独用于什么?_Java_Coding Style_Brackets - Fatal编程技术网

Java中的{code}单独用于什么?

Java中的{code}单独用于什么?,java,coding-style,brackets,Java,Coding Style,Brackets,我最近读了一些关于{}的使用特殊语法的代码,我问了一位更有经验的Java开发人员,但他也不能回答 public void doSomething() { someWorks(); { someVariables; someMoreWorks(); } someEvenWorks(); { ... } } 为什么代码作者将这些行放在{}中?我猜{}中声明的变量将在执行退出后立即释放,对吧,因为我不能再

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

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

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

是的,唯一的区别是作用域

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


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

这给了他一个嵌套的范围来声明“更多的局部”变量

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

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

花括号的其他罕见用法包括类和实例初始值设定项:

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

   {
      // some instance initialization code
   }

 }

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

你说得对-这与限制作用域有关。我认为这是So的重复,这意味着这些变量使用的内存在退出{}块后不会被释放?我不确定。请看这个问题:我有时在“真实”代码中使用它来限制变量的范围,但它有一种方法太长的坏味道。我认为,它可能非常有用!例如,您需要临时变量来保存一些值,您可以将它们放入{},然后稍后您可以再次使用该名称(使用不同的数据类型)。或者,如果函数很长,GC可能会收集{}中的临时变量。@W.N.我不确定它是否会影响GC-但如果我有一个这么长的方法,我更愿意重构。@DatVM您不需要{}来删除未使用的变量。垃圾收集器完成它。但是它可能对重用变量名很有用:)@JonSkeet难道你不使用它们来初始化匿名类吗?