Java:声明对象或整数时

Gla*_*Zee 2 java object declare

在java中创建一个对象(或任何东西)时,做什么之间有什么区别,例如,

Dog d = new Dog();
Run Code Online (Sandbox Code Playgroud)

而不是做

Dog d;
Run Code Online (Sandbox Code Playgroud)

然后,用它完成它(有时在内部和方法的开头)

d = new Dog();
Run Code Online (Sandbox Code Playgroud)

第一个不是更简单,更容易吗?人们为什么要这样做呢?

Tud*_*dor 5

考虑以下场景.假设构造函数Dog可以抛出异常:

try {
    Dog d = new Dog();    
} catch(Exception ex) {
    // treat exception
}

d.bark();
Run Code Online (Sandbox Code Playgroud)

这将无法编译,因为dtry块外部不可见.你需要做的是:

Dog d = null;
try {
    d = new Dog();    
} catch(Exception ex) {
    // treat exception
}
if(d != null) d.bark();
Run Code Online (Sandbox Code Playgroud)

而且还有很多其他情况.例如,您可能有一个if-else块,d根据某些条件进行不同的初始化:

Dog d = null;
if(/* condition */)
    d = new Dog("Lassie");   
} else {
    d = new Dog("Sam");
}
d.bark();
Run Code Online (Sandbox Code Playgroud)