What Does the throws Keyword Mean in Java?
The throws keyword in Java is used in a method signature to declare that the method might throw one or more exceptions. It does not throw an exception itself but informs the caller that an exception may be thrown.
1. Syntax of throws
returnType methodName(parameters) throws ExceptionType1, ExceptionType2 {
// Method code
}
ExceptionType1,ExceptionType2must be checked exceptions orRuntimeException.- The method does not handle the exception, but it warns the caller to handle it.
2. Difference Between throw and throws
| Feature | throw | throws |
|---|---|---|
| Purpose | Used inside a method to forcefully throw an exception | Used in the method signature to declare exceptions |
| Exception Handling | Requires an instance of Throwable (new Exception("msg")) | Does not throw an exception but tells the caller it might occur |
| Location | Inside method body | In the method declaration |
| Usage | throw new IOException("Error"); | void myMethod() throws IOException {} |
✅ Example: throw vs. throws
class Example {
// Declaring an exception using throws
public static void riskyMethod() throws IllegalAccessException {
throw new IllegalAccessException("Access denied!"); // Forcing an exception
}
public static void main(String[] args) {
try {
riskyMethod(); // Must handle or declare
} catch (IllegalAccessException e) {
System.out.println("Caught: " + e.getMessage());
}
}
}
3. When to Use throws
✅ Use throws when a method does not handle a checked exception and passes it to the caller.
✅ Use throws for methods that perform risky operations (e.g., file handling, networking, database operations).
4. Example: Using throws to Declare Exceptions
✅ Without Handling (Using throws)
import java.io.*;
public class ThrowsExample {
public static void readFile() throws IOException {
FileReader file = new FileReader("test.txt"); // May throw FileNotFoundException
BufferedReader br = new BufferedReader(file);
System.out.println(br.readLine());
}
public static void main(String[] args) {
try {
readFile(); // Must handle exception
} catch (IOException e) {
System.out.println("Handled: " + e.getMessage());
}
}
}
✅ With Handling (Using try-catch Instead)
public class TryCatchExample {
public static void readFile() {
try {
FileReader file = new FileReader("test.txt");
BufferedReader br = new BufferedReader(file);
System.out.println(br.readLine());
} catch (IOException e) {
System.out.println("Handled inside method: " + e.getMessage());
}
}
public static void main(String[] args) {
readFile(); // No need to handle again
}
}
5. Multiple Exceptions with throws
You can declare multiple exceptions separated by commas.
✅ Example: Declaring Multiple Exceptions
import java.io.*;
public class MultipleThrowsExample {
public static void processFile() throws IOException, SQLException {
FileReader file = new FileReader("test.txt"); // May throw IOException
throw new SQLException("Database error!"); // Manually throwing exception
}
public static void main(String[] args) {
try {
processFile();
} catch (IOException | SQLException e) {
System.out.println("Caught: " + e.getMessage());
}
}
}
6. Can throws Be Used with Unchecked Exceptions?
Yes! But it’s optional because unchecked exceptions (RuntimeException and its subclasses) do not require handling.
✅ Example: Using throws with an Unchecked Exception
public class UncheckedExample {
public static void riskyMethod() throws ArithmeticException {
throw new ArithmeticException("Divide by zero error!");
}
public static void main(String[] args) {
riskyMethod(); // No try-catch required, but program will crash if not handled
}
}
🛠 Best Practice: Avoid using throws for unchecked exceptions unless necessary.
7. Summary: When to Use throws
| Scenario | Use throws? |
|---|---|
| Method performs risky operations (I/O, DB, network) | ✅ Yes |
| The method does not want to handle a checked exception | ✅ Yes |
| You want the caller to handle the exception instead | ✅ Yes |
For unchecked exceptions (RuntimeException) | ❌ Not necessary |
Final Thoughts
✔ Use throws to declare checked exceptions in the method signature.
✔ Use throw inside methods to manually trigger exceptions.
✔ Multiple exceptions can be declared using throws.
✔ Avoid using throws for unchecked exceptions unless necessary.