程序代码:
public class A{
public static final String l;
public void method(String strTestData){
l = strTestData;
}
}
strTestData将包含“public static final java.lang.String DELETE”之类的数据。 有可能吗?
答案 0 :(得分:8)
这是不可能的。
如果声明static final
字段,则必须在静态inializer中或声明点初始化它。您以后不能修改该值。例如:
public static final String l = "Foo";
或
public static final String l;
static {
l = "Bar";
}
也许你应该删除final
修饰符?
答案 1 :(得分:2)
我想将最终变量初始化为函数
否,你不能这样做。这符合JLS8.3.12:
如果是空白的final(§4.12.4)类变量,则是编译时错误 没有通过静态初始化器(第8.7节)明确赋值(第16.8节) 声明它的类。
必须明确指定空白的最终实例变量(第16.9节) 类的每个构造函数(第8.8节)的结尾 声明;否则会发生编译时错误。
因此,您的代码将如下所示:
public class A{
public static final String l;
static
{
l = "Static String initialized..";
}
}
或者,您可以在声明时初始化最终变量,如下所示:
public static final String l = "Static String initialized..";
答案 2 :(得分:1)
如果变量被声明为final,则只能初始化一次。实际上,您需要完全初始化一次。这必须在声明成员变量时或在构造函数中发生。
尝试改变它也是不可能的。
答案 3 :(得分:1)
您无法从方法初始化final
变量。这是必需的,因为编译器需要确保变量只初始化一次。
可以随时调用方法,因此编译器无法确保变量仅初始化一次。