什么是初始化的java对象字段?

Eug*_*neP 9 java initialization

它是nullObject类型?

class C {
    int i;
    String s;
    public C() {}
}
Run Code Online (Sandbox Code Playgroud)

s永远null吗?

简单类型怎么样int?那会是什么?零或任意值?

方法中的局部变量怎么样?

public void meth() {
    int i;
}
Run Code Online (Sandbox Code Playgroud)

什么是酉值i


然而,依赖于这样的默认值通常被认为是糟糕的编程风格.

好的,你建议我们做什么?

class A {
    String s = "";
    int i = 0;
}
Run Code Online (Sandbox Code Playgroud)

要么:

class A {
    String s;
    int i;
    public A() {
        // default constructor
        s = "";
        i = 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个更好?为什么?

sti*_*pie 29

来自太阳java教程

声明字段时并不总是需要分配值.声明但未初始化的字段将由编译器设置为合理的默认值.一般来说,此默认值将为零或null,具体取决于数据类型.然而,依赖于这样的默认值通常被认为是糟糕的编程风格.

下表总结了上述数据类型的默认值.

Data Type   Default Value (for fields)
byte                    0 
short                   0   
int                     0 
long                    0L 
float                   0.0f 
double                  0.0d 
char                    '\u0000' 
boolean                 false
String (or any object)  null 
Run Code Online (Sandbox Code Playgroud)

局部变量略有不同; 编译器永远不会为未初始化的局部变量分配默认值.如果无法初始化声明它的局部变量,请确保在尝试使用它之前为其赋值.访问未初始化的局部变量将导致编译时错误.