如果我声明一个常量,static final double PI;
我会得到The blank final field PI may not have been initialized
错误。为什么不能先这样声明,然后再初始化呢?
更新:我可能不知道初始常量值,并且必须在一些逻辑之后对其进行初始化,以便我可以为其赋值。这就是为什么我需要稍后对其进行初始化。
如果我声明一个常量,static final double PI;
我会得到The blank final field PI may not have been initialized
错误。为什么不能先这样声明,然后再初始化呢?
更新:我可能不知道初始常量值,并且必须在一些逻辑之后对其进行初始化,以便我可以为其赋值。这就是为什么我需要稍后对其进行初始化。
变量被声明为静态意味着,当类被加载到内存中时,所有的静态变量也被加载到内存中。最重要的是,该变量是最终的,这意味着它在类加载时必须是某个值。在非静态代码块中对其进行初始化意味着将其值从无(null)更改为新分配的值。
您可以通过示例看到这一点,即使您没有初始化静态最终变量,您也可以在类的静态块中进行。
class Demo {
static final String msgHeader;
/*
Some lines of code
*/
static {
msgHeader="Please Verify the Input";
}
}
您可以稍后在代码中对其进行初始化。您只需在使用之前对其进行初始化。
它不是一次写入内存,并且在设置值之前读取不会阻塞。
Java 必须确保 final 字段只被初始化一次并且永远不会改变。这只能在初始化期间发生。
因为常量一旦被赋值就不能改变。:)
我想您必须为此初始化第一个值才能解决此问题
静态最终双 PI=3.14;
可以解决你的问题
由于字段 PI 被标记为“最终”,您以后无法通过为该字段分配新值来更改它。Final 还将字段 PI 标记为常量。因此,您需要在声明本身期间指定根本无法修改的值。
像 java 中的所有其他普通变量一样,常量变量也应该在它首先在任何方法中使用之前声明。如果您需要在没有初始化的情况下使用该变量,那么您应该将该变量声明为类变量,而不是将变量声明到方法中,这是一个常量变量,如果您将该变量声明为类变量,那么您不能修改它的值.
因为它不是恒定的,因为您可以在程序的不同位置更改它的值。
因为您试图在设置变量之前读取它。
在 JAVA 中,您可以在读取之前的任何位置进行设置。但是在您的情况下,您也将其标记为final
and that static
,这意味着
final
:您只能设置一次该值
statis
:您已将此变量设为静态,这意味着它将为每个类创建一个。