Java:初始化局部变量,仍然会出错

时间:2013-02-12 11:53:50

标签: java variables warnings local

我没有发现这个代码有任何错误,但是eclipse告诉我变量没有被初始化。它只是一个警告,但在编译之后它也不起作用。我根本找不到错误,这个代码的内容是100%正确的。请注意,此代码的结构无法轻易更改,因为下面提供的代码已经简化,因此您没有那么多内容可读; - )

int min1; float somefloat;
try {
    //setting values for min and somefloat
    min1 = 1;
    somefloat = 0.92f;
} catch (IOException ioe) {
    System.err.println("Read Exception");
} 
while (true){
    //warning: variables min1 and somefloat may not be initialized.
    float value1 = (1023 - min1) * somefloat;
    System.out.println("Value: " + value1);
}

7 个答案:

答案 0 :(得分:2)

您必须在输入任何 try块之前初始化所有变量。 Java编译器不知道在您的情况下,不会导致异常。

从理论上讲,可能是一个异常某处,它会使你的变量未初始化。这是不可接受的。因此警告。

只需将变量初始化为零。

int min1 = 0;
float somefloat = 0f;

答案 1 :(得分:1)

编译器没有分析是否在具体情况下初始化变量或者不变量。它确保如果变量仅在尝试中初始化,而不在捕获最终中初始化,则可以确保它们可能不要初始化。

使用"明显"进行类似的尝试条件如if(1>0) {}。编译器编译而不是对代码进行分析。虽然对于人来说很明显会发生一些事情,java编译器没有代码来检测这种情况,也没有用java语法指定。因此,您希望编译器能够保持编译清晰,可预测和快速的AI。

您的代码有BTW错误报告,而不是您所描述的错误,因为没有地方IOException可以被抛出。

答案 2 :(得分:0)

您必须在声明它们时或至少在try-catch块之外初始化它们。因为编译器无法确定try-catch块内的初始化是否会正常完成,在这种情况下,您将在外部使用未初始化的变量。

int min1=0; float somefloat=0.0f;

答案 3 :(得分:0)

  

然而eclipse告诉我变量没有初始化

显示警告,因为在try内初始化变量之前抛出异常是可能的。然后在while范围内变量保持未初始化状态。

答案 4 :(得分:0)

如果它进入catch块,它们应该具有初始值。试试这个:

int min1 = 0; float somefloat = 0f;
try {
   //setting values for min and somefloat
   min1 = 1;
   somefloat = 0.92f;
} catch (IOException ioe) {
    System.err.println("Read Exception");
} 
while (true){
  //warning: variables min1 and somefloat may not be initialized.
  float value1 = (1023 - min1) * somefloat;
  System.out.println("Value: " + value1);

}

答案 5 :(得分:0)

你需要在声明期间初始化变量。在try中的变量赋值将覆盖该值,如果发生任何异常(不知道你的情况如何......),它将采用默认值。在编译期间,编译器不会查看您的代码是否会抛出异常(throw除外,它需要匹配catch)因此需要显式初始化。

答案 6 :(得分:-1)

private void tset(){
    int min1; float somefloat;
    try {
        //setting values for min and somefloat
        min1 = 1;
        somefloat = 0.92f;
    while (true){
        //warning: variables min1 and somefloat may not be initialized.
        float value1 = (1023 - min1) * somefloat;
        System.out.println("Value: " + value1);
    }
    } catch (Exception ioe) {
        System.err.println("Read Exception");
    } 
}

这可能是您正在寻找的代码......