Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: in progress

Methods are forbidden to must not throw RuntimeException or Exception. Handling these exceptions requires catching RuntimeException, which is forbidden in guideline disallowed by rule ERR14-J. Do not catch RuntimeException. Moreover, throwing a RuntimeException can lead to subtle errors, for instance, a caller cannot examine the exception to determine why it was thrown, and consequently cannot attempt recovery.

Instead, Methods can throw a more specific exception , subclassed from Exception. Note that it is permissible to construct an exception class specifically for a single throw statement.

...

Code Block
bgColor#ffcccc
boolean isCapitalized(String s) {
  if (s == null) {
    throw new RuntimeException("Null String");
  }
  if (s.equals("")) {
    return true;
  }
  String first = s.substring(0, 1);
  String rest = s.substring(1);
  return (first.equals(first.toUpperCase()) &&
          rest.equals(rest.toLowerCase()));
}

To properly handle the case of passing in a null string parameter, any code that calls this method must catch RuntimeException, which violates guideline A calling method must violate rule ERR14-J. Do not catch RuntimeException to handle null string arguments to the method.

Compliant Solution

This compliant solution throws a specific exception (NullPointerException) to denote the particular exceptional condition.

...

This noncompliant code example uses a broad specifies the Exception class in the throws clause of the method declaration of for the doSomething() method.

Code Block
bgColor#ffcccc
private void doSomething() throws Exception {
  //...
}

Compliant Solution

To be compliant, be as specific as possible when declaring exceptions while continuing to respect the required abstraction levelThis compliant solution declares a specific exception in the throws clause of the method declaration for the doSomething() method.

Code Block
bgColor#ccccff
private void doSomething() throws IOException {
  //...
}

Using instanceof to check for narrower exceptions in a general catch block is often insufficient; inadequate because it is usually frequently impossible to enumerate all possible exceptions that the code could throw.

...