Sometimes, you want to create your own error messages to explain problems clearly in your program. Custom exceptions help you do that.
Throwing custom exceptions in Java
Start learning this pattern below
Jump into concepts and practice - no test required
public class MyException extends Exception { public MyException(String message) { super(message); } } // To throw the exception: throw new MyException("Error message here");
You create a new class that extends Exception or RuntimeException.
Use throw keyword to throw your custom exception.
AgeException to check if age is less than 18.public class AgeException extends Exception { public AgeException(String message) { super(message); } } // Throwing it if (age < 18) { throw new AgeException("Age must be 18 or older"); }
RuntimeException so you don't have to declare it in method signature.public class NegativeNumberException extends RuntimeException { public NegativeNumberException(String message) { super(message); } } // Throwing it if (number < 0) { throw new NegativeNumberException("Number cannot be negative"); }
This program defines a custom exception AgeException. It checks if age is less than 18 and throws the exception if so. The main method tries two ages and catches the exception to print the message.
public class CustomExceptionDemo { static class AgeException extends Exception { public AgeException(String message) { super(message); } } public static void checkAge(int age) throws AgeException { if (age < 18) { throw new AgeException("Age must be 18 or older"); } else { System.out.println("Age is valid: " + age); } } public static void main(String[] args) { try { checkAge(16); } catch (AgeException e) { System.out.println("Caught exception: " + e.getMessage()); } try { checkAge(20); } catch (AgeException e) { System.out.println("Caught exception: " + e.getMessage()); } } }
Custom exceptions make your code clearer and easier to debug.
Checked exceptions (extend Exception) must be declared or caught.
Unchecked exceptions (extend RuntimeException) do not need to be declared or caught.
Custom exceptions let you create your own error types with clear messages.
Use throw new YourException() to signal an error.
Catch your custom exceptions to handle errors gracefully.
Practice
Solution
Step 1: Understand what custom exceptions do
Custom exceptions let programmers define specific error types that describe particular problems clearly.Step 2: Identify the purpose of throwing them
Throwing a custom exception signals a specific error condition, making it easier to catch and handle that error properly.Final Answer:
To create a specific error type with a clear message for better error handling. -> Option CQuick Check:
Custom exceptions improve error clarity = A [OK]
- Thinking exceptions fix errors automatically
- Believing exceptions speed up code
- Assuming exceptions remove need for error handling
MyException?Solution
Step 1: Recall Java syntax for throwing exceptions
In Java, to throw an exception, you use the keywordthrowfollowed bynewand the exception class constructor.Step 2: Match the syntax with the options
Only throw new MyException(); uses the correct syntax:throw new MyException();Final Answer:
throw new MyException(); -> Option AQuick Check:
Throw syntax = throw new Exception() [OK]
- Omitting the 'new' keyword
- Adding extra keywords like 'exception'
- Using parentheses without 'new'
class MyException extends Exception {
public MyException(String message) {
super(message);
}
}
public class Test {
public static void check(int num) throws MyException {
if (num < 0) {
throw new MyException("Negative number not allowed");
} else {
System.out.println("Number is " + num);
}
}
public static void main(String[] args) {
try {
check(-5);
} catch (MyException e) {
System.out.println(e.getMessage());
}
}
}Solution
Step 1: Analyze the check method behavior
If the input number is less than 0, it throws aMyExceptionwith message "Negative number not allowed"; otherwise, it prints the number.Step 2: Follow the main method execution
Main callscheck(-5), which triggers the exception because -5 < 0. The exception is caught and its message is printed.Final Answer:
Negative number not allowed -> Option AQuick Check:
Exception message printed = C [OK]
- Expecting the number to print despite exception
- Thinking code causes compilation error
- Ignoring exception catch block
class MyException extends Exception {}
public class Demo {
public static void test() {
throw new MyException();
}
}Solution
Step 1: Check method signature for checked exceptions
SinceMyExceptionextendsException(a checked exception), the method must declare it withthrows MyException.Step 2: Identify missing throws declaration
The methodtest()throwsMyExceptionbut does not declare it, causing a compilation error.Final Answer:
Missing 'throws' declaration in method signature. -> Option BQuick Check:
Checked exceptions require 'throws' declaration [OK]
- Forgetting 'throws' in method signature
- Thinking all exceptions are unchecked
- Assuming extending Exception is invalid
InvalidAgeException that should be thrown when age is less than 18. Which of the following code snippets correctly defines and throws this exception inside a method validateAge?Solution
Step 1: Define a checked exception with message constructor
class InvalidAgeException extends Exception { public InvalidAgeException(String msg) { super(msg); } } void validateAge(int age) throws InvalidAgeException { if (age < 18) throw new InvalidAgeException("Age must be 18 or older"); } correctly extendsExceptionand defines a constructor that accepts a message, callingsuper(msg).Step 2: Throw exception with message and declare it
The methodvalidateAgethrowsInvalidAgeExceptionwhen age < 18 and declares it withthrows InvalidAgeException.Final Answer:
class InvalidAgeException extends Exception { public InvalidAgeException(String msg) { super(msg); } } void validateAge(int age) throws InvalidAgeException { if (age < 18) throw new InvalidAgeException("Age must be 18 or older"); } -> Option DQuick Check:
Checked exception needs constructor, throw, and throws declaration [OK]
- Not extending Exception for checked exceptions
- Missing throws declaration in method
- Not calling super(message) in constructor
