17.3 Exception Handling and the Exception Hierarchy in Java: Throwing Exceptions

Exception handling is one of the most important concepts in Java programming, as it allows programs to deal with abnormal situations in a controlled manner. An exception is an event that occurs during the execution of a program and that interrupts the normal flow of instructions. Java's exception handling mechanism is robust and relies on five keywords: try, catch, finally, throw and throws.

Exception Hierarchy in Java

In Java, all exception classes are descendants of the Throwable class. The Throwable class has two direct subclasses: Error and Exception. Errors are serious conditions that a normal program should not attempt to catch, such as OutOfMemoryError. Exceptions are conditions that a program must catch and handle.

The Exception class has many subclasses that represent different types of exceptions. Exceptions in Java are divided into two main categories:

  • Checked Exceptions: These are exceptions that must be handled or declared in the code. They are checked at compile time. Examples include IOException, SQLException, among others.
  • Unchecked Exceptions: These are exceptions that do not need to be explicitly handled or declared. They are checked at run time. Examples include RuntimeException, NullPointerException, ArithmeticException, among others.

Throwing Exceptions

In Java, when we want to throw an exception, we use the throw keyword. This is done when we want to indicate that a method has encountered a situation it cannot handle. To throw an exception, you must instantiate an object of the appropriate exception class and pass it to the throw keyword.


try {
    // Code that can throw an exception
    if (someCondition) {
        throw new Exception("Exception Description");
    }
} catch (Exception e) {
    // Code to handle the exception
    e.printStackTrace();
}

When you throw an exception, the normal flow of the program is interrupted and control is transferred to the first compatible catch block in the call stack. If there is no catch block that can handle the exception, the program will terminate.

Handling Exceptions

Exception handling is done using the try and catch blocks. The try block contains the code that can throw an exception, while the catch block contains the code that handles the exception. We can have multiple catch blocks to handle different types of exceptions.


try {
    // Code that can throw an exception
} catch (IOException e) {
    // Code to handle IOException
} catch (SQLException e) {
    // Code to handle SQLException
} catch (Exception e) {
    // Code to handle any other exceptions
}

It is important to note that catch blocks are evaluated in order, and the first catch block that is compatible with the type of exception thrown is the one that will be executed. Therefore, catch blocks for more specific exceptions must come before blocks for more general exceptions.

The Finally Keyword

The finally keyword is used to create a block of code that will be executed regardless of whether an exception is thrown or not. This block is generally used to close resources, such as files or database connections, that were opened in the try block.


try {
    // Code that can throw an exception
} catch (Exception e) {
    // Code to handle the exception
} finally {
    // Code that will always be executed, with or without exception
}

Propagating Exceptions

Sometimes a method cannot or should not handle an exception. In this case, the method can propagate the exception to the calling method by using the throws keyword in the method declaration. This indicates that the method can throw an exception of the specified type.


public void myMethod() throws IOException {
    // Code that can throw IOException
}

When a method declares an exception using throws, any other method that calls that method must handle the exception or declare it as well.

Conclusion

Exception handling is essential for creating robust and reliable programs in Java. Understanding the exception hierarchy and knowing how to throw, handle and propagate exceptions are fundamental skills for anyr Java programmer. By following exception handling best practices, you can ensure that your program can handle unexpected situations elegantly and continue operating without interruption.

Now answer the exercise about the content:

Which of the following statements about exception handling in Java is correct?

You are right! Congratulations, now go to the next page

You missed! Try again.

Article image Exception handling and the exception hierarchy in Java: Types of exceptions (checked and unchecked)

Next page of the Free Ebook:

106Exception handling and the exception hierarchy in Java: Types of exceptions (checked and unchecked)

5 minutes

Obtenez votre certificat pour ce cours gratuitement ! en téléchargeant lapplication Cursa et en lisant lebook qui sy trouve. Disponible sur Google Play ou App Store !

Get it on Google Play Get it on App Store

+ 6.5 million
students

Free and Valid
Certificate with QR Code

48 thousand free
exercises

4.8/5 rating in
app stores

Free courses in
video, audio and text