我发现了下面的Java代码,一开始看起来很不错,但是它永远无法编译:
public class UnwelcomeGuest {
public static final long GUEST_USER_ID = -1;
private static final long USER_ID;
static {
try {
USER_ID = getUserIdFromEnvironment();
} catch (IdUnavailableException e) {
USER_ID = GUEST_USER_ID;
System.out.println("Logging in as guest");
}
}
private static long getUserIdFromEnvironment()
throws IdUnavailableException {
throw new IdUnavailableException(); // Simulate an error
}
public static void main(String[] args) {
System.out.println("User ID: " + USER_ID);
}
}//Class ends here
//User defined Exception
class IdUnavailableException extends Exception {
IdUnavailableException() { }
}//Class ends here
以下是IDE显示的错误信息:
变量 USER_ID 可能已经被赋值。静态常量变量赋值时是否存在问题?
try
块或catch
块将被执行。因此,在运行时只应有一次赋值。那么为什么会出现这样的行为? - Rohit Jaintry
块中的最后一条指令,分析器就会是正确的,因为还有另一种可能性来触发异常。 - Sergey Kalinichenko