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