java – 为什么程序不允许初始化静态最终变量?
发布时间:2020-12-14 17:41:18 所属栏目:Java 来源:网络整理
导读:我看到下面的 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
我看到下面的
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中的错误信息: 静态最终变量的值赋值有问题吗? 解决方法
最终变量允许在构造函数或初始化程序块中至多有一个赋值.不编译的原因是Java代码分析器在分支中看到两个赋值给USER_ID的分配,这两个赋值与它不相互排斥.
解决这个问题很简单: static { long theId; try { theId = getUserIdFromEnvironment(); } catch (IdUnavailableException e) { theId = GUEST_USER_ID; System.out.println("Logging in as guest"); } USER_ID = theId; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |