In JavaLanguage, any subclass of Throwable except for subclasses of RuntimeException and Error. The compiler enforces the throwing and catching of checked exceptions: If your method may throw a checked exception, you must declare it in the 'throws' part of the signature. If a method calls another method which throws a checked exception, the calling method must either catch the exception or declare it in its throws clause. Further reading: * ''Does Java need Checked Exceptions?'' by BruceEckel ** http://www.mindview.net/Etc/Discussions/CheckedExceptions * ''Exceptional Java'' by AlanGriffiths ** http://www.octopull.demon.co.uk/java/ExceptionalJava.html * ''The Trouble with Checked Exceptions'' - BruceEckel and BillVenners interview AndersHejlsberg ** http://www.artima.com/intv/handcuffs.html See TheProblemWithCheckedExceptions ---- CheckedException''''''s are exceptions that you have to deal with explicitly. You either have to declare you can throw it: public List getLines(String fileName) throws IOException { List result = new Array''''''List(); Buffered''''''Reader reader = new Buffered''''''Reader(new File''''''Reader(fileName)); String line = null; while ((line = reader.readLine()) != null) { result.add(line); } return result; } or catch it and deal with it: public List getLinesIfPossible(String fileName) { List result = new Array''''''List(); try { Buffered''''''Reader reader = new Buffered''''''Reader(new File''''''Reader(fileName)); String line = null; while ((line = reader.readLine()) != null) { result.add(line); } } catch (IOException exc) { exc.printStackTrace(); // dumb logging } return result; } ---- CategoryJava CategoryException