我最近阅读了一些使用{}
特殊语法的代码,我问过一位经验丰富的Java开发人员,但他也无法回答。
public void doSomething() {
someWorks();
{
someVariables;
someMoreWorks();
}
someEvenWorks();
{
...
}
}
为什么代码作者将这些行放在{}
中?我想在{}
中声明的变量将在执行退出{}
后立即释放,因为我不能再访问{}
以外的变量了吗?
答案 0 :(得分:6)
是的,唯一的区别在于范围界定。
偶尔这对于一次性代码非常有用,例如微基准测试,您希望能够剪切和粘贴块并进行微小更改,然后可能对块进行重新排序。
我很少(如果有的话)在“真实”代码中有这样的东西。
答案 1 :(得分:4)
这为他提供了一个嵌套的范围来声明“更多本地”变量。
我想在{}中声明的变量将在退出{}之后立即释放,因为我不能再访问{}以外的这些变量了吗?
取决于你对“发布”的定义(在方法结束之前它们很可能不会被垃圾收集,所以如果这很重要,你可能想要将它们清空),但是是的。
大括号的其他很少见的用法包括类和实例初始值设定项:
class A {
static {
// some class initialization code
}
{
// some instance initialization code
}
}
答案 2 :(得分:1)
作者将这些变量放在{}中这一事实表明这些变量的范围只是{}定义的方法的范围。反过来,一旦方法完成执行,这些变量将用于垃圾收集。