我提供了许多方法:
- 我们可以在最后编写代码。
- 我们可以在catch块中编写代码。 (他们不想处理这两种方法。)
- 我们可以使用throw关键字。但实际上我试过了,它不起作用。
醇>
我试图用throw语句解释它们。
我提到了很多帖子。但我的怀疑仍未解决。
例如,
public static void main(String[] args)
{
a(); // getting exception here...
b(); // This method should executed after handling exception
}
如果您能就此提出任何建议,将会有所帮助。所以我能理解它。
答案 0 :(得分:0)
如果你想执行b();只有抛出异常,才应该在catch(){}块上调用它。无论如何你想要执行它,你可以把它放在最后{}或所有之后(见编辑)。
如果b();非常依赖于异常,或者你想使用在try {}块中初始化的变量,你应该在finally {}上写下这样的:
try{
a();
} catch (Exception e){
e.printStackTrace();
//what to do if exception was thrown
} finnaly {
b();
}
//you can also call b(); here instead of inside finnaly
如果b();用于处理异常:
try{
a();
} catch (Exception e){
e.printStackTrace();
b();
}
你也可以让方法抛出A的异常并在调用a()的方法中处理它;但如果你是主要的,你应该这样做。
编辑:根据要求,提供了面试官要求的正确答案:
try{
a();
} catch (Exception e){
e.printStackTrace(); //optional
}
b();
答案 1 :(得分:0)
对我来说,没有try-catch-finally
的唯一简洁方法就是使用CompetableFuture
功能并将每个函数的执行分配为一个单独的任务。
像这样:
@Test
public void tryCatchFinallyWithCompletableFuture() throws Exception
{
CompletableFuture
.runAsync(
() -> a()
)
.exceptionally(
(e) -> { System.out.print(e.getMessage()); return null; }
)
.thenRun(
() -> b()
)
.get();
}
static void a() {
throw new IllegalStateException("a()");
}
static void b() {
System.out.println("...but we continue after a()");
}
但是,我会认真考虑在游乐场项目的任何地方使用这种方法。此外,您必须记住a()
和b()
在多线程上下文中执行,如果存在共享状态,则可能需要同步。
答案 2 :(得分:0)
如果您处理异常并处理它,您可以在try-catch块之后运行b()
方法:
try {
a();
} catch(Exception e) {
handleMyError(e);
}
b();
这种方式执行a()
方法,如果抛出异常,则在方法handleMyError(Exception e)
中进行cought和hadled,然后执行继续to b()
,无论是否抛出异常。
答案 3 :(得分:-1)
您需要在where或finally子句
中执行方法try {
a(); // getting exception here...
} catch(Exception e) {
b(); // This method should executed after handling exception
}