Java中的本地范围

H2O*_*aCl 5 java scope

为什么大括号没有在Java中定义单独的局部作用域?我期待这是主要大括号语言(C,C++,Java,C#)的共同特征.

class LocalScopeTester
{
    public static void main(String... args)
    {
        Dog mine = new Dog("fido");
        if (mine.getName().equals("ace"))
        {
            Dog mine = new Dog("spot"); // error: duplicate local
        }
        else
        {
            Dog mine = new Dog("barkley"); // error: duplicate local
            {
                Dog mine = new Dog("boy"); // error: duplicate local
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Thi*_*ilo 17

它们确实定义了一个单独的局部作用域,但您仍然无法屏蔽父作用域中的局部变量(但您当然可以屏蔽实例变量).

但是您可以定义新变量(具有不同的名称),并且它们的范围将限制在大括号内.


Enn*_*oji 14

故意禁止在Java中使用局部变量阴影(请参阅此答案).
这个想法是,这有助于减少错误.