我对Java中的 final 变量声明有以下疑问
如果我在代码中声明以下变量:
private final String CURRENT_USER;
Eclipse向我显示以下错误消息:空白的最终字段CURRENT_USER可能尚未初始化
为什么呢?根据我的理解,如果我将变量声明为 final ,我只能初始化一次,但在我看来,只有在我声明它而不是在代码中的某个地方之后才能初始化它...
为什么?
TNX
安德烈
答案 0 :(得分:5)
您必须在声明或构造函数中初始化它。
无论
private final String CURRENT_USER = "SomeUser";
或在构造函数
中private final String CURRENT_USER;
public YourClassName(){
CURRENT_USER = "test";
}
但是您应该在驼峰案例方式中命名一个实例变量
private final String currentUser;
否则某人(包括我)认为这是一见钟情。
答案 1 :(得分:1)
Java警告你,因为你创建了一个字段;但没有初始化值 - 因此,它隐含地为空。
private final String CURRENT_USER; // <-- CURRENT_USER = null;
您可以在每个构造函数中设置此常量,也可以使用初始化块;例如,
private final String CURRENT_USER;
{
CURRENT_USER = UserLoader.getCurrentUser(); // <--- load the user.
}
或使用构造函数(再次作为示例),
public MyConstructor(String user) {
CURRENT_USER = user;
}
答案 2 :(得分:0)
必须明确指定空白的最终实例变量(第16.9节) 类的每个构造函数(第8.8节)的结尾 声明;否则会发生编译时错误。
这对于以下
的类似原因是有道理的public void someMethod() {
String s;
System.out.println(s);
}
您不应该使用未初始化的变量。由于它是final
,你只能初始化一次,你必须等到初始化发生。
你没有那么多选择。在使用它之前,在实例初始化程序块或构造函数中初始化它。
答案 3 :(得分:0)
声明为final的变量必须在声明(即),静态块或对象的构造函数中初始化。
private final String CURRENT_USER = "SOMETHING";
声明最终结果的部分原因是保证在完全初始化对象后该值可用 - 否则您将拥有最终的null对象。