Exception handling in Java is a mechanism to handle runtime errors (exceptions) so that the normal flow of the program can be maintained. Java provides keywords like try, catch, finally, throw, and throws to manage exceptions.
Types of Exceptions
-
Checked Exceptions (Compile-time exceptions)
- Must be handled explicitly (e.g.,
IOException,SQLException).
- Must be handled explicitly (e.g.,
-
Unchecked Exceptions (Runtime exceptions)
- Not checked at compile time (e.g.,
NullPointerException,ArithmeticException).
- Not checked at compile time (e.g.,
-
Errors
- Serious problems beyond application control (e.g.,
OutOfMemoryError).
- Serious problems beyond application control (e.g.,
Exception Handling Keywords
1. try-catch Block
-
try→ Contains code that might throw an exception. -
catch→ Handles the exception if it occurs.
Example: Handling ArithmeticException
public class ExceptionDemo {
public static void main(String[] args) {
try {
int result = 10 / 0; // Throws ArithmeticException
} catch (ArithmeticException e) {
System.out.println("Cannot divide by zero!");
}
}
}
Output:
Cannot divide by zero!
2. finally Block
- Always executes, whether an exception occurs or not.
- Used for cleanup (e.g., closing files, database connections).
Example: finally Usage
public class FinallyDemo {
public static void main(String[] args) {
try {
int[] arr = {1, 2, 3};
System.out.println(arr[5]); // Throws ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Array index out of bounds!");
} finally {
System.out.println("This will always run.");
}
}
}
Output:
Array index out of bounds!
This will always run.
3. throw Keyword
- Used to explicitly throw an exception.
Example: Custom Exception
public class ThrowDemo {
public static void checkAge(int age) {
if (age < 18) {
throw new ArithmeticException("Age must be 18+");
} else {
System.out.println("Access granted.");
}
}
public static void main(String[] args) {
checkAge(15); // Throws ArithmeticException
}
}
Output:
Exception in thread "main" java.lang.ArithmeticException: Age must be 18+
4. throws Keyword
- Declares that a method might throw an exception (used in method signature).
Example: throws in Method
import java.io.*;
public class ThrowsDemo {
public static void readFile() throws IOException {
FileReader file = new FileReader("test.txt");
BufferedReader br = new BufferedReader(file);
System.out.println(br.readLine());
br.close();
}
public static void main(String[] args) {
try {
readFile(); // Must handle IOException
} catch (IOException e) {
System.out.println("File not found!");
}
}
}
Output (if file doesn't exist):
File not found!
Best Practices
✔ Catch specific exceptions (not just Exception).
✔ Use finally for cleanup (e.g., closing resources).
✔ Log exceptions (using e.printStackTrace() or logging frameworks).
✔ Avoid empty catch blocks (they hide errors).
Summary Table
| Keyword | Purpose |
|---|---|
try |
Contains risky code |
catch |
Handles exceptions |
finally |
Always executes |
throw |
Manually throws exception |
throws |
Declares exceptions in method signature |
Final Example: Full Exception Handling
import java.io.*;
public class FullExceptionHandling {
public static void main(String[] args) {
try {
FileReader file = new FileReader("nonexistent.txt");
int data = file.read();
System.out.println(data);
} catch (FileNotFoundException e) {
System.out.println("File not found!");
} catch (IOException e) {
System.out.println("IO Error!");
} finally {
System.out.println("Execution complete.");
}
}
}
Output:
File not found!
Execution complete.
Conclusion
Exception handling ensures robustness and graceful failure in Java programs. Use try-catch for handling errors, finally for cleanup, and throw/throws for custom exceptions. 🚀
Top comments (0)