如果发生异常,我想要执行一些代码。但该代码也可以生成异常。但我从未见过人们在另一个try / catch中尝试/捕获。
我在做什么做得很差,也许还有更好的方法:
Uri uri = Uri.parse("some url");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try
{
startActivity(intent);
}
catch (ActivityNotFoundException anfe)
{
// Make some alert to me
// Now try to redirect them to the web version:
Uri weburi = Uri.parse("some url");
try
{
Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
startActivity(webintent);
}
catch ( Exception e )
{
// Make some alert to me
}
}
看起来有点尴尬。有什么东西可能有问题吗?
答案 0 :(得分:37)
没关系,但是如果您的异常处理逻辑很复杂,您可以考虑将其分解为自己的函数。
答案 1 :(得分:10)
编写具有如此多嵌套级别的代码是一种不好的做法,尤其是在try-catch
中 - 所以我想说:避免。 另一方面,从 catch
块中抛出异常是不可原谅的罪,所以你应该非常小心。
我的建议 - 将catch
逻辑提取到方法中(因此catch
块很简单)并确保此方法永远不会抛出任何内容:
Uri uri = Uri.parse("some url");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
try
{
startActivity(intent);
}
catch (ActivityNotFoundException anfe)
{
// Make some alert to me
// Now try to redirect them to the web version:
Uri weburi = Uri.parse("some url");
Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
silentStartActivity(webintent)
}
//...
private void silentStartActivity(Intent intent) {
try
{
startActivity(webintent);
}
catch ( Exception e )
{
// Make some alert to me
}
}
似乎(我可能错了)您正在使用异常来控制程序流。如果抛出ActivityNotFoundException
不是异常情况,请考虑标准返回值,但在正常情况下可能会发生。
答案 2 :(得分:3)
答案是否......它是100%罚款..您可能必须在JDBC和IO中使用大量这些,因为它们有很多例外需要处理,一个在另一个内部......
答案 3 :(得分:0)
如果您不想使用嵌套的try和catch,这是备用解决方案, 你也可以这样做:
boolean flag = false;
void test();
if(flag)
{
test2();
}
测试方法在这里:
private void test(){
try {
Uri uri = Uri.parse("some url");
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}catch (ActivityNotFoundException anfe){
System.out.println(anfe);
flag =true;
}
}
现在把剩下的代码放在第二个方法中:
public void test2(){
Uri weburi = Uri.parse("some url");
try
{
Intent webintent = new Intent(Intent.ACTION_VIEW, weburi);
startActivity(webintent);
}
catch ( Exception e )
{
// Make some alert to me
}