使用if和else语句区分java中的局部变量和类变量

使用if和else语句区分java中的局部变量和类变量,java,Java,输出:编译错误。变量j可能尚未初始化。 为什么会这样?当您在不使用else的情况下使用if else if时,可能不存在true,因此不会执行初始化j的语句,因此,编译器告诉您,当您使用语句System.out.println(j)访问它时,它可能尚未初始化 这可以通过添加else子句来避免: class test { public static void main(String[] args) { int i = 10; int j;

输出:
编译错误。变量j可能尚未初始化。


为什么会这样?

当您在不使用
else
的情况下使用
if else if
时,可能不存在
true
,因此不会执行初始化
j
的语句,因此,编译器告诉您,当您使用语句
System.out.println(j)访问它时,它可能尚未初始化

这可以通过添加
else
子句来避免:

class test {
    public static void main(String[] args)
    {
        int i = 10;
        int j;

        if(i == 10) {
            j = 20;
        }  else if (i == 20) {
            j = 30;
        }
        System.out.println(j);
    }
}

顺便说一句,你的标题提到了类变量,但你的问题正文中没有。与局部变量不同,实例和类变量有一个默认值,因此在访问它们之前不必初始化它们。

编译器给出了一个错误,因为即使您在
if
else if
块中为变量
j
赋值,有一种情况下,
j
的值可能没有任何值(初始化),这就是
else
条件。这就是编译器抱怨错误的原因。在代码中添加一个
else
块,并在其中初始化
j
。像下面这样

if (I==10) {
    j = 20;
} else if (I==20) {
    j = 30;
} else {
    j = 0;
}

如果您的代码可读,人们就更有可能阅读它。您的代码块都是有条件的,If和else If。因此,不保证将任何值分配给j。对于方法级变量,需要显式赋值。错误意味着在某些情况下,j不能有值(如果I不是20或10,则为true)。您应该声明
intj=0
或放入一个为
j
赋值的
else
语句。如果不初始化局部变量,则不能使用它。所以当我不是10岁或20岁的时候。它不会被初始化。但是你试着把它打印出来。因为它,你得到了例外
public static void main(String[] args) {
    int I = 10;
    int j; // j=0; If you do this, then also, the error should go away and no need for else block
    if (I == 10) {
        j = 20;
    } else if (I == 20) {
        j = 30;
    } else {
        j = 0;
    }
    System.out.println(j);
}