我对Java和Android开发很陌生。我查看了的代码AsyncTask
,并看到该类抛出3个异常:
InterruptedException
ExecutionException
TimeoutException
当我在一个AsyncTask
对象上运行execute方法时,为什么编译器在没有捕获到InterruptedException
和的情况下ExecutionException
会抱怨而不是在抱怨TimeoutException
?
更一般而言,我们如何知道需要捕获哪些异常?(当然,我会查看编译器错误并编写缺少的catch块,但我想了解其背后的原理)。
非常感谢你!
Example code:
public void test() {
AsyncTask at = new AsyncTask() {
@Override
protected Object doInBackground(Object[] params) {
return null;
}
};
Object o;
try {
o = at.execute().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
编辑:我检查这TimeoutException
是一个检查的异常(应捕获)。但是@NicolasFilotto已经回答了我的问题。谢谢你们。
该get()
方法仅抛出InterruptedException
,ExecutionException
而CancellationException
这就是为什么你不需要抓TimeoutException
在你的情况下,只有方法get(long timeout, java.util.concurrent.TimeUnit unit)
抛出上方列出的3个例外CancellationException
是的对口get()
但超时。
注意:这 CancellationException
是一个未经检查的异常,因此不需要被捕获。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句