Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.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变量的作用域是什么? 我知道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 - Fatal编程技术网

块中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的范围内 发生编译时错误


关于这一点的深入讨论可以在这里找到:你所说的“不起作用”是什么意思?编译器错误或警告,或。。。?请尽量准确描述你的描述。