Java 变量可见性

Java variable visibitlity

我有以下代码:

public class Java0102
{
    public static void main(String[] args)
    {
        int x = 2;
        int y = 10;
        if (x == 2)
        {
            x = 5;
            int w = y * x;
        }
        System.out.println("W="+w);
        int W = x*y*w;
        y = x;
        System.out.println("New W="+w);
        System.out.println("X="+x);
        System.out.println("Y="+y);
    }
}

当我尝试在 bluej 上编译它时,它说找不到符号 - 变量 w 但是由于 if 语句运行是因为 x == 2 不应该 java 假定变量 w 已初始化并且存在?

变量wif块代码内声明,这意味着它只能在该范围内访问:if语句的块代码。在该块之后,变量 w 不再存在,因此编译器错误有效。

要解决这个问题,只需在if语句之前声明并初始化变量即可。

int w = 1;
if (x == 2) {
    x = 5;
    w = y * x;
}

来自您对问题的评论:

I tought that the scope changes if a method is called and inside the method a declared variable is local so not visible outside. Is it the same thing with if statements? it changes scope?

您混淆了 class 变量的概念,即字段和局部方法变量(通常称为变量)。当您创建 class 的实例时,class 中的字段将被初始化,而方法中的变量具有特定范围,具体范围取决于它们声明的块代码。

这意味着,您可以编译此代码并且运行(并不意味着您必须像这样编写代码):

public class SomeClass {
    int x; //field
    public void someMethod(int a, int b) {
        int x = a + b;
        //this refers to the variable in the method
        System.out.println(x);
        //this refers to the variable in the class i.e. the field
        //recognizable by the usage of this keyword
        System.out.println(this.x);
    }
}

您的 w 变量需要在 if 语句之外声明。否则它就出Scope

public class Java0102
{
    public static void main(String[] args)
    {
        int x = 2;
        int y = 10;
        int w = 1;  //declare and initialize your lowercase-w variable

        if (x == 2)
        {
            x = 5;
            w = y * x; //perform your arithmetic
        }
        System.out.println("W="+w);
        int W = x*y*w;
        y = x;
        System.out.println("New W="+w);
        System.out.println("X="+x);
        System.out.println("Y="+y);
    }
}

你的w只在这个区块可见:

{ x = 5; int w = y * x; }

因此,在它之外,您无法访问它。 如果你想 , 您可以在 {} 块外定义 w。

比如

int w = 0;
{
            x = 5;
            w = y * x;
}