为什么以下Java程序不会出错?

时间:2014-02-04 16:50:00

标签: java

public class Main {

    public static void main(String[] args) {
        int i=0;
        if( i == 0){
            int j;
        }
        else{
            int j;
        }
    }
}

为什么它不会为int j的多重声明提供错误?

6 个答案:

答案 0 :(得分:2)

因为第一个j位于然后分支,而第二个位于其他分支 ...

其他然后有两个不同的范围,所以如果以这种方式声明相同的变量就没有问题..

范围由{}分隔。

您的代码与此相同:

public class Main {

    public static void main(String[] args) {
        int i=0;
        int j;
        if( i == 0){
            j = 1;
        }
        else{
            j = 2;
        }
    }
}

答案 1 :(得分:2)

ifelse都有不同的范围。

if中声明的变量只能在if及其任何子项中使用

同样,else中声明的变量只能在else及其任何子项中使用

详细了解变量范围以获取更多信息。

答案 2 :(得分:0)

因为两个“j”在不同范围内,一个在If分支中,另一个在其他分支内

if(i == 0) {     // First scope starts
    int j;
}                // First scope ends if j destroyed here
else {           // Second scope starts
    int j;
}                // Second scope ends else j destroyed here 

答案 3 :(得分:0)

在java中,有一个名为作用域的东西。如果在括号内声明变量,则仅在这些括号内知道。

例如,

public static void main(String[] args)
{
     if(true)
     { 
          int jellyBean = 100; 
          System.out.println("You can use this variable here" + jellyBean );
     }//When the code comes to this bracket, the jellyBean variable is destroyed and can be redeclared. 

     System.out.println("You cannot use this variable here because it's not declared" + jellyBean );//Will produce error
     int jellyBean  = 10; //Perfectly valid code because the previous variable has been destroyed



}

答案 4 :(得分:0)

只会执行一个范围,因此只会创建一个范围。如果条件(i == 0)不为真,它将不会进入范围,它将进入else范围并创建整数j。如果(i == 0)它将进入范围并创建j;它永远不会进入其他范围。所以无论如何变量j只会被声明一次。

答案 5 :(得分:0)

这只是因为局部变量作用域,只要你打开一个块({)并关闭块(}),局部变量就有了作用域 在这里你要在两个区块内声明int j

public class Main {

    public static void main(String[] args) {
        int i=0;
        if( i == 0){
            int j; // here j has scoped in if block
        }
        else{
            int j; // and here j has scoped in else block
        }
    }
}

java编译器知道在不同的作用域see documentation

中有两个j