【发布时间】:2015-07-24 02:22:31
【问题描述】:
我有以下代码:
public static void main( String[ ] args ){
int begin, end;
try{
begin = Integer.valueOf( args[ 1 ] );
end = Integer.valueOf( args[ 2 ] );
}catch( NumberFormatException conversion_error ){
System.out.println( "Not A Number." );
System.exit( 1 );
}
if( begin >= end ){
System.out.println( "Wrong arguments. (" + begin + " >= " + end + ")" );
System.exit(1);
}
System.out.print( "OK." );
System.exit(0);
}
当我尝试编译它时,我得到了这个错误。
错误:(13, 13) java: 变量 begin 可能没有被初始化 错误:(13, 22) java: 变量 end 可能没有被初始化
我理解为什么编译器会警告我,但我的代码的真正目的是处理这种情况:当变量未初始化时,我关闭了我的程序。在这种情况下,我从不使用它们。
我认为答案相当简单:在“try”块之外初始化“begin”和“end”,例如立即为它们分配零。
int begin = 0, end = 0;
但是我可以强制编译器忽略这个问题吗?有什么办法可以关闭对我的代码的这种好奇检查吗?除了我的变量值可能错误之外,我的程序没有任何技术问题。
【问题讨论】:
-
作为一般经验法则,编译器试图帮助您避免代码可能产生的问题。您可以将值初始化为默认的已知值...
-
查看“默认值”部分here。
begin和end不会被分配默认值。这会导致问题,因为您在if语句中使用它们。你别无选择,只能初始化它们。 -
你在这里问错了问题。您不想将其关闭:您想修复代码以使其能够编译。
标签: java