如果我声明像static final double PI;
这样的常量,我会收到The blank final field PI may not have been initialized
错误。为什么我不能先这样声明并稍后初始化它?
UPDATE :我可能不知道初始常量值,并且必须在一些逻辑之后初始化它,以便我可以为它创建一个值。这就是为什么我需要稍后对其进行初始化。
答案 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中的所有其他常规变量一样,常量变量也应在首先在任何方法中使用之前声明。如果你需要在没有初始化的情况下使用该变量,那么你应该将该变量声明为类变量,而不是将变量声明为方法,这是一个常量变量,如果将此变量声明为类变量,则无法修改其值