本地变量可能尚未初始化 – 检测方法中未经检查的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
方法调用时可能会抛出它。
由于o
在try
块中初始化并初始化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); }
- Java的。 可能抛出的params(NullpointerException)的函数?
- java.net.SocketException:网络无法访问:连接
- Thymeleaf:如何在使用Thymeleaf的JavaScript中使用布尔运算符
- 如何使用logger打印exception?
- 如何解决此错误java.util.ConcurrentModificationException
- javaexception会终止整个java应用程序吗?
- 连接Java-MySql:不允许公钥检索
- Javaexception命名约定
- java.lang.NullPointerException Hibernate与Ehcache一起使用