本地变量可能尚未初始化 – 检测方法中未经检查的exception抛出

我有一些这种结构的代码:

public void method() { Object o; try { o = new Object(); } catch (Exception e) { //Processing, several lines throw new Error(); //Our own unchecked exception } doSomething(o); } 

我有很多方法,我在catch块中有相同的代码,所以我想将它提取到一个方法,以便我可以保存一些行。 我的问题是,如果我这样做,我得到一个编译器错误“局部变量o可能没有被初始化”。

 public void method() { Object o; try { o = new Object(); } catch (Exception e) { handleError(); } //doSomething(o); compiler error } private void handleError() throws Error { //Processing, several lines throw new Error(); } 

有没有解决方法?

您需要在使用之前初始化局部变量,如下所示

 public void method() { Object o=null; try { o = new Object(); } catch (Exception e) { handleError(); } doSomething(o); } 

在使用未初始化的局部变量之前,您将无法获得编译失败

初始化对象: Object o = null; 但是要注意NullPointerException ,当你将它NullPointerException方法调用时可能会抛出它。

由于otry块中初始化并初始化o可能会抛出exception,因此java认为doSomething(o)语句可能会在没有初始化的情况下达到。 所以java希望o初始化,因为new Object()抛出exception。

因此,使用null初始化o将解决问题

 public void method() { Object o = null; try { o = new Object(); //--> If new Object() throws exception then o remains uninitialized } catch (Exception e) { handleError(); } if(o != null) doSomething(o); } 

只需将doSomething(o)放在try { }块中:

 public void method() { Object o; try { o = new Object(); doSomething(o); } catch (Exception e) { handleError(); } } 

如果对象的创建失败,您可能不想执行doSomething()!

实例变量是Object类型,因此您应该初始化值“null”

 public void method() { Object o=null; try { o = new Object(); } catch (Exception e) { handleError(); } doSomething(o); }