2

如果我声明一个常量,static final double PI;我会得到The blank final field PI may not have been initialized错误。为什么不能先这样声明,然后再初始化呢?

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

4

9 回答 9

2

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

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

class Demo {
       static final String msgHeader;
       /*
           Some lines of code
       */
       static { 
                msgHeader="Please Verify the Input";
       }
 }
于 2012-12-04T09:35:58.670 回答
2

您可以稍后在代码中对其进行初始化。您只需在使用之前对其进行初始化。

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

于 2012-12-04T09:23:54.167 回答
1

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

于 2012-12-04T09:23:49.640 回答
1

因为常量一旦被赋值就不能改变。:)

于 2012-12-04T09:24:01.060 回答
1

我想您必须为此初始化第一个值才能解决此问题

静态最终双 PI=3.14;

可以解决你的问题

于 2012-12-04T09:24:23.623 回答
0

由于字段 PI 被标记为“最终”,您以后无法通过为该字段分配新值来更改它。Final 还将字段 PI 标记为常量。因此,您需要在声明本身期间指定根本无法修改的值。

于 2012-12-04T09:27:29.193 回答
0

像 java 中的所有其他普通变量一样,常量变量也应该在它首先在任何方法中使用之前声明。如果您需要在没有初始化的情况下使用该变量,那么您应该将该变量声明为类变量,而不是将变量声明到方法中,这是一个常量变量,如果您将该变量声明为类变量,那么您不能修改它的值.

于 2012-12-04T09:30:33.203 回答
0

因为它不是恒定的,因为您可以在程序的不同位置更改它的值。

于 2012-12-04T09:23:39.703 回答
0

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

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

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

于 2012-12-04T09:26:28.520 回答