Wie kann ich benutzerdefinierte Ausnahmen schreiben?

Wie kann ich eine neue Exception erstellen, die sich von den vorgefertigten Typen unterscheidet?

 public class InvalidBankFeeAmountException extends Exception{ public InvalidBankFeeAmountException(String message){ super(message); } } 

Es wird die Warnung für die InvalidBankFeeAmountException angezeigt, die in der ersten Zeile geschrieben ist.

Alles, was Sie tun müssen, ist eine neue class erstellen und extend Exception .

Wenn Sie eine Exception wünschen, extend RuntimeException ist, müssen Sie extend RuntimeException .

Hinweis : Bei einer aktivierten Exception müssen Sie entweder die Exception in einen try / catch Block einschließen oder eine throws -Klausel für die Methodendeklaration haben. (wie IOException ) Ungeprüfte Exceptions können genauso wie geprüfte Exceptions ausgetriggers werden, Sie müssen sie jedoch nicht explizit behandeln ( IndexOutOfBoundsException ).

Beispielsweise:

 public class MyNewException extends RuntimeException { public MyNewException(){ super(); } public MyNewException(String message){ super(message); } } 

nur entweder verlängern

  • Exception , wenn Ihre Ausnahme geprüft werden soll (zB: in einer throws-Klausel erforderlich)
  • RuntimeException , wenn die Ausnahme RuntimeException soll.

Stellen Sie sicher, dass Sie nicht mit Ausnahmen übersteuert werden, insbesondere mit aktivierten Ausnahmen. Ich würde empfehlen, Kapitel 9 von Joshua Blochs effektivem Java zu lesen, und insbesondere seinen Artikel 60 (Bevorzugung von Standardausnahmen). Zu seinen Empfehlungen gehören außerdem die Verwendung von geprüften Ausnahmen für Ausnahmen, von denen wiederhergestellt werden kann, die Verwendung von ungeprüften Ausnahmen (RuntimeExceptions) für Programmiererrors und die Vermeidung der unnötigen Verwendung von geprüften Ausnahmen.

Wenn eine InvalidBankAccount-Ausnahme ausgetriggers wird, wenn ein Programmiererrors gefunden wird, möchten Sie wahrscheinlich nur eine standardmäßige ungeprüfte Java IllegalStateException auslösen. (Dies vermeidet die Notwendigkeit, serialVersionUID zu deklarieren.)

Schau dir an:

http://www.onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=1

Ein Beispiel ist dort auf Seite 2 angegeben:

 public class DuplicateUsernameException extends Exception { public DuplicateUsernameException (String username){....} public String requestedUsername(){...} public String[] availableNames(){...} } 

zusammen mit einer Reihe von Richtlinien für wann und warum Sie Ihre eigenen Ausnahmen erstellen.