繁体   English   中英

关于在Java中声明为final的变量的澄清?

[英]Some clarification about the variable declared as final in Java?

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

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

private final String CURRENT_USER;

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

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

为什么?

特纳克斯

安德里亚

您必须在声明或构造函数中对其进行初始化。

要么

private final String CURRENT_USER = "SomeUser";

或在构造函数中

private final String CURRENT_USER;

public YourClassName(){
   CURRENT_USER = "test";
}

但是您应该以驼峰式的方式命名实例变量

private final String currentUser;

否则,有人(包括我)认为这是一见钟情。

Java警告您,因为您已经创建了一个字段。 但未初始化该值-因此,它隐式为null。

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;
}

JLS说

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

出于与以下类似的原因,这很有意义

public void someMethod() {
    String s;
    System.out.println(s);
} 

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

您没有太多选择。 使用它之前,请在实例初始化程序块或构造函数中对其进行初始化。

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

private final String CURRENT_USER = "SOMETHING";

声明final的一部分是保证值在对象完全初始化后才可使用-否则,您将获得final的null对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM