从一个catch块移动到另一个try catch块

3

我有多个try catch块。我希望让我的程序这样运行,如果第一个块中找不到某些内容,那么该块的catch就会将其传递给另一个try catch块。 我进行了一些研究,但无法得出解决方案。

try{
    Something
} catch (Exception e) {
    Move to next set of try catch
    }

这就是我想要实现的。


你为什么认为需要像这样嵌套try-catch块? - Tim Biegeleisen
我有不同的元素,它们执行完全相同的操作,但属于不同的类。 - Kaneki
5个回答

2

来自评论

我有4个元素需要创建try catch块,即4个try catch块

如果要尝试4个不同的代码块,则可以编写如下代码:

try {
    // Attempt 1
} catch (Exception e1) {
    try {
        // Attempt 2
    } catch (Exception e2) {
        try {
            // Attempt 3
        } catch (Exception e3) {
            try {
                // Attempt 4
            } catch (Exception e4) {
                RuntimeException e = new RuntimeException("All attempts failed", e1);
                e.addSuppressed(e2);
                e.addSuppressed(e3);
                e.addSuppressed(e4);
                throw e;
            }
        }
    }
}

1
你可以在try catch块下面添加finally块,即使在try块中发现了一些错误,finally块也会运行。你可以查看下面的代码片段,并替换你的代码,其中method1将拥有你想要在第一个块中运行的所有代码,依此类推。
 try {
        method1();
    }finally {
        try {
            method2();
        }finally {
            try {
                method3();
            }finally {
                try {
                    method4();
                }finally {

                }
            }   
        }
    }

我有4个元素需要创建try catch块,即4个try catch块。 - Kaneki
如果您有4个块,并且这将是不变的,则需要为每个块管理不同的try catch。 - Avinash tiwari
所有的事情都发生在doInBackground方法中。所有4个元素都是它的一部分。因此,同一个代码块内。 - Kaneki
请检查更新后的答案,您需要将block1代码放在method1中,将block2代码放在method2中,以此类推。您还可以在finally块之前使用catch块来打印异常。 - Avinash tiwari
让我们在聊天中继续这个讨论 - Avinash tiwari

0
public void tryBlock() {
    try {
        // Enter Your Code;
    } catch (Exception e) {
        System.out.println(" exception :: " + e);
        tryBlock();
    }
}

1
可能类似这样就是答案了,但代码附加一些注释会更好。第二次调用使用了“不同的类”,所以可能需要给tryBlock传递一些参数。 - Tapani

0

你可以使用简单的 try-catch 结构,例如:

try{
    something;
}catch(exception){
    Exception2;
}
catch(exception2){
    Exception2;
}


Or you can use nested try-catch like:

try{
  statement
  try{
      statement
      try{
          something
      }catch(exception1){
          Exception
      }
    }catch(exception2){
         Exception2
    }
  }catch(Exception3){
       Exception3
  }  

0

@Kaneki 如果你想要使用嵌套的try-catch块执行,以便如果操作不在try块内执行,则操作将在catch块中执行

为此,您必须测试条件,无论您是否想要转发到catch块。

注意:要从Try块转发到Catch块,您必须从Try块抛出异常,该异常必须被Catch块捕获。

根据您的要求,此代码可能会对您有所帮助:

public void nestedTryCatch(){
        boolean wantTogoForNext = false;
        try{
            wantTogoForNext = false;
            doSomthing("Attempt-I");
            wantTogoForNext = true;
            if(wantTogoForNext)
                throw new Exception("1");
        }catch(Exception e1){
            try{
                wantTogoForNext = false;
                doSomthing("Attempt-2");
                wantTogoForNext = true;
                if(wantTogoForNext)
                    throw new Exception("2");
            }catch(Exception e2){
                try{
                    wantTogoForNext = false;
                    doSomthing("Attempt-3");
                    wantTogoForNext = true;
                    if(wantTogoForNext)
                        throw new Exception("3");
                }catch(Exception e3){
                    try{
                        wantTogoForNext = false;
                        doSomthing("Attempt-4");
                        wantTogoForNext = true;
                        if(wantTogoForNext)
                            throw new Exception("4");
                    }catch(Exception e4){
                        
                        try{
                            wantTogoForNext = false;
                            doSomthing("Attempt-5");
                            wantTogoForNext = true;
                            if(wantTogoForNext)
                                throw new Exception("5");
                        }catch(Exception e5){               
                            
                            doSomthing("Attempt-Last");
                            
                        }   
                    }
                }
            }
        }
    }



public void doSomthing(String attempt){
        System.out.println(attempt);
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接