在查看一些旧代码时,我遇到了这个宝石:
MyObject o = new MyObject("parameter");
if (o == null) o = new MyObject("fallback parameter");
Run Code Online (Sandbox Code Playgroud)
第二行在Eclipse中标记为死代码,我理解为什么.似乎没有显式抛出任何异常,并且MyObject构造函数不可能抛出任何类型的异常(例如NullPointerExceptions).
我的问题是为什么有空检查?以前是否可以在旧版本的Java中使构造函数返回null?或者这只是无用的死代码?
假设我有以下代码:
public class Conf{
public Conf(String szPath) throws IOException, ConfErrorException{
...
}
public void someMethod(){
...
}
}
Run Code Online (Sandbox Code Playgroud)
然后我想以这种方式实例化对象:
Conf configuration = new Conf("/etc/myapp/myconf.conf");
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因,构造函数抛出任何定义的异常,那么是否会创建对象?
我的意思是,我仍然可以访问其中的方法,例如,如下面的代码?
Conf configuration;
try{
configuration = new Conf("/etc/myapp/myconf.conf");
}catch(IOException|ConfErrorException e){
//Suppose we entered here
configuration.someMethod();
}
Run Code Online (Sandbox Code Playgroud)