在静态初始化程序中初始化静态final字段不会给我一个编译时常量(Java)

时间:2013-07-25 12:56:02

标签: java constants static-variables static-initialization

我尝试在servlet中使用注释@MultipartConfig(location = Test.MY_CONST)。

当我从下面使用代码1 时,它可以正常工作。当我从下面使用 Code 2 时,我在编译时得到以下输出:

  

错误:属性值必须保持不变
@MultipartConfig(location = Test.MY_CONST)


代码1

public class Test {
    public static final String MY_CONST = "/constant/path";
}


代码2

public class Test {
    public static final String MY_CONST;
    static {
        MY_CONST = "/constant/path";
    }
}

的问题: 我有几个问题都归结为“这里发生了什么?

  1. 代码1 代码2 之间的区别是什么?
  2. 我是否收到此错误,因为@MultipartConfig需要编译时常量,并且在静态初始化程序中为MY_CONST分配编译时常量不会使MY_CONST成为编译时 - 常数β
  3. System.out.println(Test.MY_CONST)打印的内容,如果代码2 ,如果我用反射更改MY_CONST的值?

1 个答案:

答案 0 :(得分:1)

您无法更改“最终”变量。 “常量”变量无法更改。它也直接初始化。

相关问题