This tutorial will discuss the difference between throw and throws keywords.
Java throw Keyword
We use the keyword throw when we want to explicitly throw an exception.
throw new Exception();
Example of using the throw keyword in Java:
class Test {
public static void main(String[] args) {
Test test = new Test();
test.reserveSeats(8);
}
private void reserveSeats(int numberOfSeats) {
if (numberOfSeats > 5) {
throw new IllegalArgumentException("No more than 5 seats can be reserved.");
} else {
System.out.println("Reservation successful!");
}
}
}
Here in the reserveSeats method, we wrote the code that throws an exception in case the user tries to reserve more than 5 seats per reservation.
Java throws keyword
The throws clause is used to declare an exception.
The syntax of the throws keyword:
void methodName() throws Exception
Example of using the throws keyword in Java:
class Test {
public void validateStatus(String status) throws IOException {
if (status.equals("invalid")) {
throw new IOException("Status of the file is invalid, the stream is closed!");
} else {
System.out.println("Status in valid.");
}
}
}
Here in the validateStatus method we explicitly throw an exception in case the status of the file is invalid.
Since IOException is a checked exception, we must handle it either with a try-catch block, or a throws keyword. In this case, we put the throws keyword in the method declaration, and we handled the exception.
There is a rule in Java that says: If you are calling a method that declares an exception, you must either catch or declare the exception.
throws vs throw in Java
| throw | throws | |
|---|---|---|
| Java throw keyword is used to explicitly throw an exception. | Java throws keyword is used to declare an exception. | |
| A checked exception cannot be propagated using throw only. | A checked exception can be propagated with throws. | |
| The throw keyword is followed by an instance. | the throws keyword is followed by class. | |
| The throw keyword is used within the method. | The throws keyword is used with the method signature. | |
That’s it!