variables可能没有被初始化错误
当我尝试编译这个:
public static Rand searchCount (int[] x) { int a ; int b ; ... for (int l= 0; l<x.length; l++) { if (x[l] == 0) a++ ; else if (x[l] == 1) b++ ; } ... }
我得到这些错误:
Rand.java:72: variable a might not have been initialized a++ ; ^ Rand.java:74: variable b might not have been initialized b++ ; ^ 2 errors
在我看来,我初始化他们在方法的顶部。 怎么了?
你宣布他们,但你没有初始化他们。 初始化它们是将它们设置为一个值:
int a; // This is a declaration a = 0; // This is an initialization int b = 1; // This is a declaration and initialization
你得到的错误,因为你没有初始化的variables,但你增加它们(例如, a++
)在循环。
局部variables不会得到默认值。 他们的初始值是未定义的,通过某种方式分配值。 在你可以使用局部variables之前,它们必须被初始化。
当你在类层次(作为一个成员,即作为一个字段)和方法级别声明一个variables时,会有很大的不同。
如果您在课程级别声明了一个字段,则会根据其types获取默认值。 如果在方法级别或块中声明一个variables(意味着{}中的任何代码)不会获取任何值,并且保持未定义状态,直到某种方式获得一些起始值,即分配给它们的一些值。
如果它们被声明为类的字段,那么它们将被初始化为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”。 这是因为创buildClazz的新实例时会调用一个特殊的构造函数。 首先调用super ()
,那么field a
将被隐式初始化,然后行b = 0
将被执行。
你宣布他们,但没有初始化。
int a; // declaration, unknown value a = 0; // initialization int a = 0; // declaration with initialization
你宣布他们,但没有初始化他们的价值。 添加这样的东西:
int a = 0;
你还没有初始化a
和b
,只声明它们。 有一个微妙的区别。
int a = 0; int b = 0;
至less这是C ++,我认为Java是相同的概念。
您在方法开始时声明了它们,但是您从未初始化它们。 初始化将设置它们等于一个值,例如:
int a = 0; int b = 0;
你宣布他们,但没有给他们一个初始价值 – 因此,他们是无形的。 尝试像这样:
public static Rand searchCount (int[] x) { int a = 0 ; int b = 0 ;
警告应该消失。
想象一下,如果循环中x [l]既不是0也不是1,会发生什么情况。 在这种情况下,a和b将永远不会被赋值并且具有未定义的值。 你必须用一些值来初始化它们,例如0。
将variables“a”设置为这样的值,
a=0;
声明和初始化都是不同的。
祝你好运
int a = 0; int b = 0;