In a finally block, can I tell if an exception has been thrown [duplicate]

痴心易碎 提交于 2019-12-04 22:12:46

There is no automatic way provided by Java. You could use a boolean flag:

boolean success = false;
try {
  reportStartWorkflow();
  doThis();
  doThat();
  workHarder();
  success = true;
} finally {
  if (!success) System.out.println("No success");
}

Two solutions: call reportEndWorkflow twice, once in a catch block and once in the end of try:

try {
    // ...
    reportEndWorkflow("success");
} catch (MyException ex) {
    reportEndWorkflow("failure");
}

Or you can introduce a boolean variable:

boolean finished = false;
try {
    // ...
    finished = true;
} finally {
    // ...
}

You're there because your try-block has completed execution. Whether an exception was thrown or not.

To distinguish between when an exception occur or whether your method flow execution completed successfully, you could try doing something like this:

boolean isComplete = false;
try
{
  try
  {
    reportStartWorkflow();
    doThis();
    doThat();
    workHarder();
    isComplete = true;
  }
  catch (Exception e)
  {}
}
finally
{
  if (isComplete)
  {
    // TODO: Some routine
  }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!