编译报错的问题,局部变量a没有赋初值,为什么没有编译报错?求大神解释下

public class VariableUse{
public static void main(String[] args){
int a;
if(a==8){
int b=9;
System.out.println("a="+a);
System.out.println("b="+b);
}
System.out.println("a="+a);
System.out.println("b="+b);//这行注释后就会报a没有赋初值的错误,但是不注释就只报变量b没有声明的错误
}
}

其实a没有初始化也是有波浪线提示未赋初值,只是ide优先先提示没有定义变量的错误,这就是注释b那行或者先定义b后面也会出现a没初始化原因。

首先,你的疑问的根源其实是由于 System.out.println("b="+b) 打印导致的,因为 b 在 if 的语句块内,是局部变量,外面就访问不到了,当然会报编译错误:变量未定义。
其次,Java 中变量声明和初始化可以不在一行代码里面,例如,这里 a 先声明后,紧接着赋值就不会报编译错误:

       int a;
        a=sc.nextInt();