Java代码中局部变量a、b、c初始化错误原因是什么?
问题原因分析
这个报错和变量初始化本身无关,核心问题是Java的块级作用域规则:
- 在
else对应的大括号内部声明的a、b、c三个变量,属于块级局部变量,仅在else的大括号范围内有效,出了这个范围编译器就会认为这三个变量不存在。 - 你的
System.out.println语句写在了else大括号的外面,调用这三个变量的时候已经超出了它们的有效作用域,因此编译器会抛出未定义、未初始化的错误。
修复方案
有两种常用的修改方式:
方案1:将打印逻辑移入else块内
直接把使用变量的逻辑放到和变量声明相同的作用域内即可:
public static void main(String[] args) { if (args.length < 2) throw new IllegalArgumentException("we need 2 arguments"); else { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); int c = a+b; System.out.println(a + " + " + b + " = " + c); } }
方案2:提前在外部声明变量
把三个变量的声明放在if-else结构之外,扩大作用域范围:
public static void main(String[] args) { int a, b, c; if (args.length < 2) throw new IllegalArgumentException("we need 2 arguments"); else { a = Integer.parseInt(args[0]); b = Integer.parseInt(args[1]); c = a + b; } System.out.println(a + " + " + b + " = " + c); }
注:你原代码中异常信息的
argumeents拼写有误,正确拼写为arguments。
内容的提问来源于stack exchange,提问作者xomage
相关产品推荐
相关产品推荐

