Exceptions
Basics
An exception occurs when something unintended occurs and the interpreter must exit.
While this might sound like a bad thing, we can often throw our own exceptions to handle known errors or edge cases more gracefully.
Exceptions in Java
In Java, there are two types of exceptions: checked and unchecked.
Checked exceptions are handled during compile time, and are included in the method declaration. As an example:
public void openFile() throws IOException {
...
}
All children that override this method must also throw the same exceptions.
Unchecked exceptions are not handled during compile time, and thus are thrown during runtime. All Error
or RuntimeException
types are unchecked; all other exceptions are checked. Some examples of unchecked exceptions are dividing by zero (ArithmeticException
), or accessing an index that doesn't exist (IndexOutOfBoundsException
).

Creating Custom Exceptions
We can use the throw
keyword to create exceptions with custom error messages as follows:
public void divide(int a, int b) {
if (b == 0) {
throw new Exception("Error Message");
} else {
return a / b;
}
}
This is often used within a try catch
block, as such:
public void divide2() {
int a = 0;
try {
return 10 / 0;
} catch(Exception e) {
System.out.println("oops!");
}
}
An alternate to custom exceptions is to simply handle exception cases. For example, we can add a check to make sure a number is not zero before running a division operation.
Try/Catch/Finally Example
Let's check your understanding of exception handling!
static String tryCatchFinally() {
try {
System.out.println("trying");
throw new Exception();
} catch (Exception e) {
System.out.println("catching");
return "done catch";
} finally {
System.out.println("finally");
}
}
What will be printed (and in what order) when tryCatchFinally()
is run?
Suppose the same code were run, but without the catch
block. What would this code do?
static String tryFinally() {
try {
System.out.println("trying");
throw new Exception();
} finally {
System.out.println("finally");
}
}
Last updated
Was this helpful?