Exceptions and control flow
When an exception occurs within a method, the control flow defined by Java can take several forms.
If an exception occurs outside a try..catch block, the exception simply propagates "up" to the caller.
If an exception occurs inside a try..catch block, then
the control flow can take different forms. Here are the cases, along with
indicators for which code blocks are included in the control flow:
Case | try | catch | finally | bottom |
try throws no exception | y | - | y | y |
try throws a handled exception | y | y | y | y |
try throws an unhandled exception | y | - | y | - |
Here, "bottom" refers simply to any code which follows the finally block,
as shown here :
final class Bottom { void doStuff() { try { //..elided } catch( Exception ex ) { //..elided } finally { //..elided } //any code appearing here, after the finally //block, is "bottom" code } }
There is a misconception - especially common among C programmers migrating to Java - that exceptions can be used to define ordinary control flow. This is a misuse of the idea of exceptions, which are meant only for defects or for items outside the direct control of the program.
See Also :
Would you use this technique?