Dav*_*vid 58 java variables initialization
当我尝试编译这个:
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++ ;
}
...
}
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
Rand.java:72: variable a might not have been initialized
a++ ;
^
Rand.java:74: variable b might not have been initialized
b++ ;
^
2 errors
Run Code Online (Sandbox Code Playgroud)
在我看来,我在方法的顶部初始化它们.什么出错了?
mip*_*adi 90
你声明了它们,但你没有初始化它们.初始化它们将它们设置为等于值:
int a; // This is a declaration
a = 0; // This is an initialization
int b = 1; // This is a declaration and initialization
Run Code Online (Sandbox Code Playgroud)
您得到错误是因为您没有初始化变量,但是a++在for循环中递增它们(例如).
Java原语具有默认值,但是作为一个用户在下面评论
声明为类成员时,它们的默认值为零.局部变量没有默认值
小智 75
局部变量不会获得默认值.它们的初始值是未定义的,没有通过某种方式分配值.在使用局部变量之前,必须初始化它们.
在类级别(作为成员,即作为字段)和方法级别声明变量时,存在很大差异.
如果在类级别声明字段,则会根据其类型获取默认值.如果在方法级别或作为块声明变量(意味着{}内的任何代码),则不会获取任何值并保持未定义,直到他们获得一些起始值,即分配给它们的某些值.
如果它们被声明为类的字段,那么它们将真正初始化为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 ();
}
}
Run Code Online (Sandbox Code Playgroud)
然后此代码将打印"0".这是因为在创建Clazz的新实例时将调用一个特殊的构造函数.首先super ()将被调用,然后a将隐式初始化字段,然后b = 0执行行.
你声明了它们,但没有初始化。
int a; // declaration, unknown value
a = 0; // initialization
int a = 0; // declaration with initialization
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
321501 次 |
| 最近记录: |