 Where do exceptions fit into the Java class hierarchy? All exceptions are subclasses of the throwable class. One of its subclasses is error, which represents system errors. Like these. If you ever get a linkage error or a virtual machine error, it means the system has some serious problems and your best bet is to terminate the program as gracefully and quickly as possible. As a side note, I've been programming in Java for many years and have never encountered one of these. The other, more common subclass of throwable is exception. Most of the areas you've encountered this semester are almost certainly subclasses of runtime exception. Arithmetic exception is for things like division by zero. Null pointer exceptions occur when you try to use an object that doesn't reference anything. An index out of bounds exception happens if you attempt to access elements outside the bounds of an array. And illegal argument exceptions occur if you pass arguments to a method that it can't work with. All of these are called unchecked exceptions. You can catch them, but the compiler won't insist that you do. This is a good thing. Otherwise you would have to put a try-catch block around every integer division and every array access in your programs. There are, however, exceptions that you must handle within your program. These are called checked exceptions. If you use a method that could throw a class not found exception or IO exception, the compiler will insist that you deal with it, either by catching it or throwing it to the method that called your method. We'll be seeing IO exception a lot when we talk about files later in this chapter.