Here’s a clear breakdown of the difference between checked and unchecked exceptions in Java:
✅ Checked Exceptions
Definition
These are exceptions that the compiler forces you to handle — either by using a try-catch block or by declaring them in the method signature using throws.
Examples
IOExceptionSQLExceptionFileNotFoundException
Key Features
- Checked at compile time.
- The compiler checks that your code either handles these exceptions (with
try-catch) or explicitly declares them (withthrows). - Typically used for recoverable situations — things you can anticipate and handle gracefully, like file not found, database issues, etc.
❌ Unchecked Exceptions
Definition
These are exceptions that the compiler does not force you to handle. They usually indicate programming bugs (logic errors) rather than recoverable conditions.
Examples
NullPointerExceptionArrayIndexOutOfBoundsExceptionIllegalArgumentException
Key Features
- Checked at runtime.
- No need to catch or declare them.
- Usually caused by flaws in code logic — like accessing a null reference or an out-of-bounds index.
Quick Summary Table
| Checked Exception | Unchecked Exception | |
|---|---|---|
| Checked by Compiler? | ✅ Yes | ❌ No |
| Declared in method signature? | ✅ Required | ❌ Not required |
| Type | Recoverable | Programming bug |
| Examples | IOException, SQLException | NullPointerException, ArrayIndexOutOfBoundsException |
A Rule of Thumb
- Checked Exceptions = External problems (files, network, DB)
- Unchecked Exceptions = Internal problems (bugs, logic errors)