我有一个变量声明为在Java中最后关于在Java中声明为final的变量的一些说明?
如果我在我的代码声明以下变量以下疑问:
private final String CURRENT_USER;
的Eclipse告诉我下面的错误信息:的空白最终字段CURRENT_USER可能尚未初始化
为什么?从我目前了解,如果我一个变量声明为最终我可以初始化只有一次,但在我看来,我可以初始化它,只有当我在代码中声明它,而不是某个地方后...
为什么?
TNX
安德烈
我有一个变量声明为在Java中最后关于在Java中声明为final的变量的一些说明?
如果我在我的代码声明以下变量以下疑问:
private final String CURRENT_USER;
的Eclipse告诉我下面的错误信息:的空白最终字段CURRENT_USER可能尚未初始化
为什么?从我目前了解,如果我一个变量声明为最终我可以初始化只有一次,但在我看来,我可以初始化它,只有当我在代码中声明它,而不是某个地方后...
为什么?
TNX
安德烈
你必须在声明或在构造函数中进行初始化。
要么
private final String CURRENT_USER = "SomeUser";
或在构造
private final String CURRENT_USER;
public YourClassName(){
CURRENT_USER = "test";
}
但是,你应该在驼峰命名实例变量方式
private final String currentUser;
否则有人(包括我)认为这是一见钟情。
@OliCharlesworth谢谢我对命名感到困惑。 –
空白最终实例变量必须在 被明确赋值(§16.9)每一个构造的端部(§8.8),其中它是 声明的类的;否则会发生编译时错误。
这是有道理的,类似的理由如下
public void someMethod() {
String s;
System.out.println(s);
}
你不应该能够使用未初始化的变量。由于它是final
,你只能初始化一次,你必须等到初始化发生。
你没有那么多的选择。在使用它之前,在实例初始化块或构造函数中初始化它。
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;
}
被声明最终变量必须在声明(即),静态块或构造进行初始化的对象。声明最后事情的
private final String CURRENT_USER = "SOMETHING";
部分是保证该值将提供给该对象一旦完全初始化 - 否则,你就会有一个最终的,空的对象。
因为你不应该能够使用未初始化的变量。 –
确实 - WHEN会被初始化吗?这是不确定的。而不确定因素在爪哇地区是一个不容否认的问题。 – Gimby