关于在Java中声明为final的变量的一些说明?

时间:2013-12-19 14:33:11

标签: java final

我对Java中的 final 变量声明有以下疑问

如果我在代码中声明以下变量:

private final String CURRENT_USER;

Eclipse向我显示以下错误消息:空白的最终字段CURRENT_USER可能尚未初始化

为什么呢?根据我的理解,如果我将变量声明为 final ,我只能初始化一次,但在我看来,只有在我声明它而不是在代码中的某个地方之后才能初始化它...

为什么?

TNX

安德烈

4 个答案:

答案 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)

JLS says

  

必须明确指定空白的最终实例变量(第16.9节)   类的每个构造函数(第8.8节)的结尾   声明;否则会发生编译时错误。

这对于以下

的类似原因是有道理的
public void someMethod() {
    String s;
    System.out.println(s);
} 

您不应该使用未初始化的变量。由于它是final,你只能初始化一次,你必须等到初始化发生。

你没有那么多选择。在使用它之前,在实例初始化程序块或构造函数中初始化它。

答案 3 :(得分:0)

声明为final的变量必须在声明(即),静态块或对象的构造函数中初始化。

private final String CURRENT_USER = "SOMETHING";

声明最终结果的部分原因是保证在完全初始化对象后该值可用 - 否则您将拥有最终的null对象。