当前位置:  开发笔记 > 编程语言 > 正文

变量可能没有初始化错误

如何解决《变量可能没有初始化错误》经验,为你挑选了3个好方法。

当我尝试编译这个:

public static Rand searchCount (int[] x) 
{
    int a ; 
    int b ; 

    ...   

    for (int l= 0; l

我收到这些错误:

Rand.java:72: variable a might not have been initialized
                a++ ;
                ^
Rand.java:74: variable b might not have been initialized
                b++ ;
                ^
2 errors

在我看来,我在方法的顶部初始化它们.什么出错了?



1> mipadi..:

声明了它们,但你没有初始化它们.初始化它们将它们设置为等于值:

int a;        // This is a declaration
a = 0;        // This is an initialization
int b = 1;    // This is a declaration and initialization

您得到错误是因为您没有初始化变量,但是a++for循环中递增它们(例如).

Java原语具有默认值,但是作为一个用户在下面评论

声明为类成员时,它们的默认值为零.局部变量没有默认值


也许"int b = 0;" 是"声明和初始化".
有人可以解释这是怎么可能的,因为原语不能有空值,它们的默认值是0,为什么它没有显示初始化错误?
@SrujanBarai当声明为类成员*时,它们的默认值为零*.局部变量没有默认值.

2> 小智..:

局部变量不会获得默认值.它们的初始值是未定义的,没有通过某种方式分配值.在使用局部变量之前,必须初始化它们.

在类级别(作为成员,即作为字段)和方法级别声明变量时,存在很大差异.

如果在类级别声明字段,则会根据其类型获取默认值.如果在方法级别或作为块声明变量(意味着{}内的任何代码),则不会获取任何值并保持未定义,直到他们获得一些起始值,即分配给它们的某些值.



3> Roman..:

如果它们被声明为类的字段,那么它们将真正初始化为0.

你有点困惑,因为如果你写:

class Clazz {
  int a;
  int b;

  Clazz () {
     super ();
     b = 0;
  }

  public void printA () {
     sout (a + b);
  }

  public static void main (String[] args) {
     new Clazz ().printA ();
  }
}

然后此代码将打印"0".这是因为在创建Clazz的新实例时将调用一个特殊的构造函数.首先super ()将被调用,然后a将隐式初始化字段,然后b = 0执行行.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有