Java变量的默认值和初始化
学习自
变量的默认值
只有成员变量才有默认值,而局部变量必须要赋初值,为什么非怎么设置?下面我们来看一下。
类型 | 值 |
---|---|
Int | 0 |
Long | 0 |
Boolean | false |
float | 0.0 |
double | 0.0 |
char | /u000(NULL) |
String | NULL |
Object | NULL |
数组(未初始化) | NULL |
数组(初始化) | 数组各个元素的值,其类型的默认值 |
然后我们通过一个程序来检测一下:
public static class Measurement {
int i;
long l;
boolean b;
float f;
double d;
char c;
String s;
Object o;
int[] ints;
public void printAll() {
System.out.println("Java 各个数据类型的初始值如下:\n" +
"Int:" + i + "\n" +
"Long:" + l + "\n" +
"Boolean:" + b + "\n" +
"Float:" + f + "\n" +
"Double:" + d + "\n" +
"Char:" + c + "\n" +
"String:" + s + "\n" +
"Object:" + o + "\n" +
"Array:" + ints + "\n");
}
}
我们看一下这个程序运行之后的结果,
Java 各个数据类型的初始值如下:
Int:0
Long:0
Boolean:false
Float:0.0
Double:0.0
Char:
String:null
Object:null
Array:null
为什么有默认值
这是一个好问题!?因为有些成员变量在初始化的时候不知道赋什么初始值,所以为了解决这个问题,Java 直接给没有显示初始化的成员变量赋一个初始值。
初始值赋值的过程
成员变量赋默认值的过程是依照从上到下的循序来的,这一个,我们通过IDE来进行一下证实。
public static class Circle{
double r;
double area=3.14*r*r;
}
我们可以发现,我们的这部分代码可以正常编译和运行。
然后我们在尝试一下下面的代码:
public class Circle {
double area = 3.14 * r * r;
double r;
}
这样我们会发现一个问题,我们的编译器是无法正常编译的,编译器会出现向前引用的问题。
这样我们就可以得到我们的赋值过程是从上到下的。
局部变量也需要显示初始化
上面我们提到了成员变量的默认值,那为什么在方法中的布局要显示的初始化呢?我想我们都写过这样的代码:
public static void test(){
int i;
i++;
}
如果你是这样写的代码,那么我们的编译器一定会出错。所以我们的得出一个结论,我们所有的局部变量必须要有初始化值。因为可以这种手段来避免很多无畏的错误。