// here an application exception
// there a system exception
Your example is not that great, as you're throwing the same exception

System exceptions are not application exceptions. There are three
patterns :
Application exceptions that are checked exceptions may be defined as such by being listed in the throws clauses of the methods.An application exception that is an unchecked exception is defined as an application exception by annotating it with the ApplicationException metadata annotation, or denoting it in the deployment descriptor with the application-exception element.A system exception is an exception that is a java.rmi.RemoteException (or one of its subclasses) or a RuntimeException that is not an application exception. Your example uses a checked exception (extending Exception), so it has to be defined in the throws clause of the method. Here is another example, with two application exceptions, one checked and one unchecked :