块中java变量的作用域是什么? 我知道C++变量中有块范围,例如,下面的代码在C++ 中工作 void foo(){ int a = 0; for(int i = 0; i < 10; ++i){ int a = 1; //re-define a here. } void foo(){ int a=0; 对于(int i=0;i
}块中java变量的作用域是什么? 我知道C++变量中有块范围,例如,下面的代码在C++ 中工作 void foo(){ int a = 0; for(int i = 0; i < 10; ++i){ int a = 1; //re-define a here. } void foo(){ int a=0; 对于(int i=0;i,java,variables,scope,Java,Variables,Scope,} 但是这个片段在java中不起作用,它报告了“重复的局部变量a”,这是否意味着java变量没有块作用域?它们有块作用域。这意味着你不能在街区外使用它们。但是,Java不允许通过内部块中的名称在外部块中隐藏名称。Java变量确实有块作用域,但如果您注意到int a已经在作用域中定义 { int a = 0; { { } } } { int a=0; { { } } } 所有子范围都在最上面的花括号范围内。因此会
但是这个片段在java中不起作用,它报告了“重复的局部变量a”,这是否意味着java变量没有块作用域?它们有块作用域。这意味着你不能在街区外使用它们。但是,Java不允许通过内部块中的名称在外部块中隐藏名称。Java变量确实有块作用域,但如果您注意到int a已经在作用域中定义 { int a = 0; { { } } } { int a=0; { { } } }
所有子范围都在最上面的花括号范围内。因此会出现重复的变量错误。确实如此,但它是嵌套的,因此在foo()中定义的“a”在foo中的所有块中都可用 以下是您正在寻找的示例:
void foo(){
{
int a = 0;
// Do something with a
}
for(int i = 0; i < 10; ++i){
int a = 1; //define a here.
}
}
void foo(){
{
int a=0;
//带着一个微笑做某事
}
对于(int i=0;i<10;++i){
int a=1;//在这里定义a。
}
}
前面的答案已经说明了原因,但我只想表明这仍然是允许的:
void foo(){
for(int i = 0; i < 10; ++i){
int a = 1;
}
int a = 0;
}
void foo(){
对于(int i=0;i<10;++i){
INTA=1;
}
int a=0;
}
在这种情况下,循环内部的a
不会隐藏外部的a
,因此它是有效的
也应该是C++中的这种方式,它不太混乱,防止意外声明同名变量。
< P>: 局部变量的作用域 块(§14.2)中的声明是 在其中 将显示声明,从其 自己的初始设定人(§14.4),包括 右方是否还有其他声明人 在局部变量声明中 声明 局部变量v的名称可能不是 重新声明为的局部变量 直接封闭法, 构造函数或初始值设定项块 在v或a的范围内 发生编译时错误关于这一点的深入讨论可以在这里找到:你所说的“不起作用”是什么意思?编译器错误或警告,或。。。?请尽量准确描述你的描述。