声明常量没有值

时间:2012-12-04 09:21:24

标签: java

如果我声明像static final double PI;这样的常量,我会收到The blank final field PI may not have been initialized错误。为什么我不能先这样声明并稍后初始化它?

UPDATE :我可能不知道初始常量值,并且必须在一些逻辑之后初始化它,以便我可以为它创建一个值。这就是为什么我需要稍后对其进行初始化。

9 个答案:

答案 0 :(得分:2)

您可以稍后在代码中初始化它。您必须先将其初始化才能使用它。

在设置值之前,不会写入一次内存并且读取将不会阻塞。

答案 1 :(得分:2)

变量被声明为静态方法,当类被加载到内存中时,所有静态变量也被加载到内存中。最重要的是,变量是最终的意味着它必须在类加载时具有一定的价值。在非静态代码块中初始化它意味着将其值从无(null)更改为新分配的值。

您可以通过示例看到这一点,即使您没有初始化静态最终变量,也可以在类的静态块中执行此操作。

class Demo {
       static final String msgHeader;
       /*
           Some lines of code
       */
       static { 
                msgHeader="Please Verify the Input";
       }
 }

答案 2 :(得分:1)

Java必须确保最终字段仅初始化一次并且永远不会更改。这只能在初始化期间发生。

答案 3 :(得分:1)

因为常量在分配后无法更改。 :)

答案 4 :(得分:1)

我猜你必须初始化第一个值才能解决这个问题

  

静态最终双倍PI = 3.14;

可以解决您的问题

答案 5 :(得分:0)

因为它不会保持不变,因为您可以在程序的不同位置更改它。

答案 6 :(得分:0)

因为您在设置之前尝试读取变量。

在JAVA中,您可以在读取之前的任何位置进行设置。 但在您的情况下,您已将其标记为final,同样也标记为static,这意味着

final:您只能将值设置一次 statis:您已将此变量设为静态,这意味着每个类将创建一个变量。

答案 7 :(得分:0)

由于字段PI标记为“最终”,因此稍后您无法通过为字段分配新值来更改字段。最终也将场PI标记为常数。 因此,您需要在声明期间指定值,而不能对其进行修改。

答案 8 :(得分:0)

与java中的所有其他常规变量一样,常量变量也应在首先在任何方法中使用之前声明。如果你需要在没有初始化的情况下使用该变量,那么你应该将该变量声明为类变量,而不是将变量声明为方法,这是一个常量变量,如果将此变量声明为类变量,则无法修改其值