public class HelloWorld{ //Why is it throwing error here
final static int i;
public static void main(String []args){
int i = call(10);
System.out.println("Hello World"+i);
}
static int call(int y){
int r= y;
return r ;
}
}
对于上述程序,final static int i;
的使用会引发错误。任何人都可以告诉我为什么会这样。在方法中声明时,相同的final static int i;
工作正常。
错误:
$javac HelloWorld.java 2>&1
HelloWorld.java:1: error: variable i might not have been initialized
public class HelloWorld{
^
1 error
答案 0 :(得分:4)
您收到错误,因为它应该是这样的行为。
如果空白的final(§4.12.4)类变量未被声明它的类的静态初始化程序(第8.7节)明确赋值(第16.8节),则是编译时错误。
设C为一个类,让V为C的空白静态最终成员字段,在C中声明。然后:
- 在最左边的枚举常量,静态初始值设定项(§8.7)或C的静态变量初始值设定项之前,绝对是未分配的(并且未明确赋值)。
现在,由于既没有静态初始值设定项,也没有静态变量初始化程序,因此您的最终字段肯定是未分配的。
您应该在声明点指定i
某个值:
final static int i = 0;
或static
块(此处不是真的需要):
final static int i;
static { i = 0; }
答案 1 :(得分:2)
final
变量应至少初始化为默认值。
静态最终变量应该在类加载完成之前初始化。也就是说你可以在声明时或静态块中初始化它们。
所以你的最终变量应该是
final static int i=0;//initialization at the time of declaration
或
final static int i;
static{
i=0;//initialization in static block
}
答案 2 :(得分:1)
同样适用于非静态变量。用0初始化它就可以了。
final static int i= 0;
然而你暗影它。
您声明一个新的i
并使用该i
。您的最终{{1}}根本不会被使用。
答案 3 :(得分:0)
分配一些值
final static int i = 0;
您可能也对
感兴趣Why must local variables, including primitives, always be initialized in Java?
答案 4 :(得分:0)
您需要使用final static int i;
int value