我目前正在使用 Android Studio 开发 Android 应用程序,但遇到了一个我无法理解的错误。这是我的代码示例:
public class MyClass {
public void method1() throws MyException {
methodIO(); // Unhandled Exception: java.io.IOException
methodRun(); // OK
}
public void method2() throws Exception {
methodIO(); // OK
methodRun(); // OK
}
public void methodIO() throws IOException {}
public void methodRun() throws RuntimeException {}
}
class MyException extends Exception {
public MyException(){super();}
public MyException(String message, int errorCode) {
super(message);
}
}
我不明白为什么在 method1() 中,出现以下错误“未处理的异常:java.io.IOException”,而 method2() 编译正常。即使两个类都是从 Exception 继承的,抛出 RuntimeException 的方法也不会出现此问题。有人知道这里发生了什么事吗?
Ps:我想避免使用 try/catch block 或添加新的 throws
子句
最佳答案
MyException
不会扩展 IOException
,因此当前不会处理 methodIO
抛出的 IOException
。
它在method2
中工作,因为Exception
是IOException
和MyException
的公共(public)父类(super class),所以它指定了如何两种类型的异常都应该被处理。
将其添加到method1
的throws
子句中:
public void method1() throws MyException, IOException {
或者在方法体中捕获:
public void method1() throws MyException {
try {
methodIO();
} catch (IOException e) {
// Handle appropriately.
}
}
关于Java 未处理的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34793423/