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++;
}

如果你是这样写的代码,那么我们的编译器一定会出错。所以我们的得出一个结论,我们所有的局部变量必须要有初始化值。因为可以这种手段来避免很多无畏的错误。

猜你喜欢

转载自www.cnblogs.com/cao-1/p/12170117.html