1

程序代码:

public class A{
   public static final String l;

   public void method(String strTestData){
     l = strTestData;
   }
}

strTestData 将包含诸如“public static final java.lang.String DELETE”之类的数据。可能吗?

4

4 回答 4

9

这是不可能的。

如果您声明一个static final字段,则必须在静态初始化程序中或在声明时对其进行初始化。您以后无法修改该值。例如:

public static final String l = "Foo";

或者

public static final String l;

static {
  l = "Bar";
}

也许您应该删除final修饰符?

于 2013-06-19T13:32:50.990 回答
2

我想将最终变量初始化为函数

,你不能这样做。这符合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..";
于 2013-06-19T13:38:11.620 回答
1

您不能final从方法初始化变量。这是必需的,因为编译器需要确保变量只初始化一次。

可以随时调用方法,因此编译器无法确保变量只初始化一次。

于 2013-06-19T13:35:58.073 回答
1

如果一个变量被声明为final,你只能初始化它一次。事实上,您需要完全初始化一次。这必须在您声明成员变量或在构造函数中发生。

试图改变它也是不可能的。

于 2013-06-19T13:35:07.603 回答