【发布时间】:2014-05-03 15:38:54
【问题描述】:
Java 的编译器,至少是我使用的 Oracle 的编译器,拒绝将 System.exit() 识别为过程终止。例如下面的代码给出了编译错误:
public static int readInteger( ArrayList<String> listLines, int iLineNumber0 ){
try {
int value = Integer.parseInt( listLines.get( 0 ) );
return value;
} catch( Throwable t ) {
System.err.println( "error reading line: " + iLineNumber0 + ": " + t );
System.exit( -1 );
}
}
错误是:“缺少返回语句。”因此,要完成这项工作,我必须添加这样的 return 语句(编译成功):
public static int readInteger( ArrayList<String> listLines, int iLineNumber0 ){
try {
int value = Integer.parseInt( listLines.get( 0 ) );
return value;
} catch( Throwable t ) {
System.err.println( "error reading line: " + iLineNumber0 + ": " + t );
System.exit( -1 );
}
return 0; // unreachable code
}
具有讽刺意味的是,最终需要的 return 语句是无法访问的代码,尽管编译器也没有意识到这一点。
【问题讨论】:
-
因为它不是——它只是一个方法调用,与任何其他调用没有区别。
-
你也可以只在
catch之后return value,这样就不需要另一个return语句,但我想这看起来很奇怪。 -
您可以更改/重新定义 System.exit() 或使用 SecrutiyManager 来防止程序退出。语言中没有指定 System.exit() 必须做什么。
-
您可以在
exit之后执行throw new Error()。这将使编译器感到高兴,并且实际上是有意义的。 -
或者干脆
throw t;。
标签: java compiler-errors