Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The nonlocality of throw statements and corresponding catch statements can also impede optimizers from improving code that relies on exception handling. Relying on catching exceptions for control flow also complicates debugging because exceptions indicate a jump in control flow from the throw statement to the catch clause. Finally, exceptions need not be implemented to perform optimally, as it is assumed that they are thrown only in exceptional circumstances. Throwing and catching an exception often yields less performant code than does handling the error with some other mechanism.

Noncompliant Code Example

This noncompliant code example attempts to concatenate the processed elements of the strings array:

...

It uses an ArrayIndexOutOfBoundsException to detect the end of the array. Unfortunately, since ArrayIndexOutOfBoundsException is a RuntimeException, it could be thrown by processString() without being declared in a throws clause. So it is possible for processStrings() to terminate before all of the strings are processed.

Compliant Solution

This compliant solution uses a standard for loop to concatenate the strings. In this case, the ArrayIndexOutOfBoundsException can occur only under some exceptional circumstances and can be handled outside of normal processing.

...

Technically this code need not catch ArrayIndexOutOfBoundsException because it is a runtime exception. In fact, this code should not catch ArrayIndexOutOfBoundsException unless the method has a particular way of handling it (that differs from handling any other exception class). Otherwise, this code should just let the exception propagate up the call stack.

Applicability

Use of exceptions for any purpose other than detecting and handling exceptional conditions complicates program analysis and debugging, degrades performance, and can increase maintenance costs.

Bibliography

[Bloch 2001]Item 39, "Use Exceptions Only for Exceptional Conditions"
[JLS 2011]Chapter 11, "Exceptions"

...