变量throws变量可能没有初始化错误

时间:2013-08-11 13:46:33

标签: java

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

5 个答案:

答案 0 :(得分:4)

您收到错误,因为它应该是这样的行为。

来自JLS - Section 8.3.1.2

  

如果空白的final(§4.12.4)类变量未被声明它的类的静态初始化程序(第8.7节)明确赋值(第16.8节),则是编译时错误。

来自JLS - Section 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