[英]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;
}
必须在声明该类的每个构造函数(第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.