Why should I create my own Exceptions?
You should write your own exception classes if you answer yes to any of the following questions; otherwise, you can probably use someone else’s.
- Do you need an exception type that isn’t represented by those in the Java platform?
- Would it help users if they could differentiate your exceptions from those thrown by classes written by other vendors?
- Does your code throw more than one related exception?
- If you use someone else’s exceptions, will users have access to those exceptions?
- A similar question is, should your package be independent and self-contained?
Taken from "2. Creating custom Exception" in this article.
When should we create our own Java exception classes?
From Best Practices for Exception Handling:
Try not to create new custom exceptions if they do not have useful information for client code.
What is wrong with the following code?
public class DuplicateUsernameException extends Exception {}
It is not giving any useful information to the client code, other than an indicative exception name. Do not forget that Java Exception classes are like other classes, wherein you can add methods that you think the client code will invoke to get more information.
We could add useful methods to DuplicateUsernameException
, such as:
public class DuplicateUsernameException
extends Exception {
public DuplicateUsernameException
(String username){....}
public String requestedUsername(){...}
public String[] availableNames(){...}
}
The new version provides two useful methods: requestedUsername()
, which returns the requested name, and availableNames()
, which returns an array of available usernames similar to the one requested. The client could use these methods to inform that the requested username is not available and that other usernames are available. But if you are not going to add extra information, then just throw a standard exception:
throw new IllegalArgumentException("Username already taken");
When should I create a new Exception class
Exceptions are a special case. In their case, the inheritance is not to add new functionality, but to add new classes of errors. This lets your code catch particular kinds of errors while ignoring others.
Say you are writing a large project. You have a Data component, and you have a Display component. They can both fail in various ways, and you want to throw exceptions for these failures. The Display component doesn't care about exceptions arising from the Data component, though, and vice versa. If all the classes just threw Exception
, there'd be no way to figure out where the exception came from. However, if you subclass Exception
with DataException
and GraphicsException
, even though they don't add new functionality, you can now throw and catch those particular types of exceptions, i.e. a graphics component can catch GraphicsException
and not have to deal with data exceptions.
When should you create your own exception type?
Create your own exception types when:
- you might want to differentiate them when handling. If they're different types, you have the option to write different
catch
clauses. They should still have a common base so you can have common handling when that is appropriate - you want to add some specific structured data you can actually use in the handler
Having separate list
and vector
exceptions doesn't seem worthwhile, unless there's something distinctively list-like or vectorish about them. Are you really going to have different catch handling depending on which type of container had an error?
Conversely it could make sense to have separate exception types for things that might be recoverable at runtime, versus things that are rolled-back but could be retried, versus things that are definitely fatal or indicate a bug.
When exception occur, what is responsibility of exception class?
What is exception class do when exception occur
Nothing.if i want to write my own MyException extend Exception, what method i write in exception class to handle my exception
You don't need to implement anything, but you may want to have constructor to set message and store some relevant information.
Related Topics
Why Can't a Generic Type Parameter Have a Lower Bound in Java
Select an Option from the Right-Click Menu in Selenium Webdriver - Java
How to Convert String to Date Without Knowing the Format
How to Read the Manifest File for a Webapp Running in Apache Tomcat
Eclipse Error: "Failed to Connect to Remote Vm"
Declaring and Initializing Variables Within Java Switches
The Server Time Zone Value 'Aest' Is Unrecognized or Represents More Than One Time Zone
How to Convert a Byte Array into a Double and Back
Invalid Thread Access Error with Java Swt
Variable's Scope in a Switch Case
How to Convert Binary String Value to Decimal
How to Parse Datetime-String with Am/Pm Marker
How to Format Localdate Object to Mm/Dd/Yyyy and Have Format Persist
Arraylist Initial Capacity and Indexoutofboundsexception
How to Get a Defaulttablemodel Object's Data into a Subclass of Defaulttablemodel
JPA and Hibernate - Criteria VS. Jpql or Hql
Mockito:How to Verify Method Was Called on an Object Created Within a Method