日期:2014-05-20  浏览次数:20681 次

3行代码,求解释
public class Test01 {
{
a = b + 1 ;
}
int a = 5 ;
int b = 5 ;
}

-----------------------------------------------
上面这段代码报错了,求解释。不需要告诉我怎么解决。我要求解释为什么报错。

------解决方案--------------------
向前参照错误,因为b在定义前被使用
编译器做语法检测的时候,先扫描到 a = b + 1 ; 扫描到a的时候,发现a是变量,就会看a有没有被定义(继续查看后面发现有int a定义,所以ok),扫描到b的时候,同样会发现b是变量,会继续查看b有没有被定义(继续查看后面发现有int b定义,所以也ok),到这里,a和b的定义都是ok的,问题就在于a出现在等号的左边,所以a是变量赋值,即此时此刻没有使用到a的值,而b是出现在等号的右边,是使用b的值,而此时此刻因为b是在后面才定义,所以b还没有值,于是b就属于被提前使用,所以出错了(因为没有值就不能使用)。
所以类似这样的变量在后面定义的,提前出现在等号的右边就属于非法使用。