Ich versuche, meine eigene Ausnahmeklasse auf einfachste Weise zu definieren, und das bekomme ich:
public class MyException extends Exception {}
public class Foo {
public bar() throws MyException {
throw new MyException("try again please");
}
}
Dies sagt der Java-Compiler:
cannot find symbol: constructor MyException(java.lang.String)
Ich hatte das Gefühl, dass dieser Konstruktor geerbt werden muss java.lang.Exception
, nicht wahr?
java
exception
inheritance
yegor256
quelle
quelle
if your class has no constructor, you get the default even if the superclass does not have it
Der letzte Teil ist nicht möglich, es sei denn, die Oberklasse verfügt über einen Standardkonstruktor, auf den diese Klasse zugreifen kann (möglicherweise geschützt oder paketgeschützt). Andernfalls müssen Sie explizit einen der übergeordneten Konstruktoren aufrufen, da sonst die Kompilierung fehlschlägt.MyException(Throwable)
undMyException(String, Throwable)
Konstrukteuren richtig Unterstützung Ausnahmen verketten .Eine typische benutzerdefinierte Ausnahme, die ich definieren würde, ist ungefähr so:
Ich erstelle sogar eine Vorlage mit Eclipse, damit ich nicht immer wieder alles schreiben muss.
quelle
Wenn Sie das neue Klassendialogfeld in Eclipse verwenden, können Sie das Feld
java.lang.Exception
Superklasse einfach auf "Konstruktoren aus Superklasse" setzen und aktivieren. Daraufhin wird Folgendes generiert:Als Antwort auf die folgende Frage,
super()
ob der defualt-Konstruktor nicht aufgerufen werden soll, hat Oracle Folgendes zu sagen :quelle
super()
?Der Grund hierfür wird im Vererbungsartikel der Java-Plattform erläutert, in dem es heißt:
quelle
quelle
Die Ausnahmeklasse hat zwei Konstruktoren
public Exception()
- Dadurch wird eine Ausnahme ohne zusätzliche Informationen erstellt. Die Art der Ausnahme wird normalerweise aus dem Klassennamen abgeleitet.public Exception(String s)
- Erstellt eine Ausnahme mit der angegebenen Fehlermeldung. Eine Detailmeldung ist eine Zeichenfolge, die die Fehlerbedingung für diese bestimmte Ausnahme beschreibt.quelle
public Exception(Throwable)
undpublic Exception(String, Throwable)
. Sie werden benötigt, um die Verkettung von Ausnahmen ordnungsgemäß zu unterstützen .Wenn Sie von Exception erben, müssen Sie einen Konstruktor angeben, der einen String als Parameter verwendet (er enthält die Fehlermeldung).
quelle
und vergessen Sie nicht, wie Sie am einfachsten eine Ausnahme auslösen können (Sie müssen keine Klasse erstellen).
quelle