Be specific in throws clause

In the throws clause of a method header, be as specific as possible. Do not group together related exceptions in a generic exception class - that would represent a loss of possibly important information.

An alternative is the exception translation practice, in which a low level exception is first translated into a higher level exception before being thrown out of the method.


Here, both IOException and FileNotFoundException are incorrectly lumped together as Exception.

import java.util.*;

public final class BadGenericThrow {

  * BAD: This method throws a generic Exception, instead
  * of FileNotFoundException and IOException.
  public void makeFile() throws Exception {
    //create a Serializable List
    List<String> quarks = Arrays.asList("up", "down", "strange");
    //serialize the List
    try (
      ObjectOutputStream output  = new ObjectOutputStream(
        new FileOutputStream("quarks.ser")

See Also :
Exception translation