Ausnahmen in Java beinhalten die Frage der Eltern-Kind-Klasse, die in einen Satz zusammengefasst werden kann: Die Ausnahme des Konstruktors einer Unterklasse muss Ausnahmen der übergeordneten Klasse enthalten. Die Methode der Unterklasse kann eine Ausnahme der übergeordneten Klasse "Umfang weniger als oder gleich" ausgeben oder nicht.
1. Warum muss der Konstruktor eine Ausnahme mit der übergeordneten Klasse auswerfen?
Es gibt eine Passage in "Thingking in Java":
Ausnahmebeschränkung: Wenn eine Methode überschreiben, können nur die in der Ausnahmebeschreibung der Basisklassenmethode aufgeführten Ausnahmen geworfen werden.
Ausnahmebeschränkungen funktionieren nicht für den Konstruktor. Sie werden feststellen, dass der Konstruktor des Stormyinning alle Ausnahmen machen kann, ohne auf die Ausnahmen des Basisklassenkonstruktors zu achten. Da der Konstruktor jedoch auf die eine oder andere Weise aufgerufen werden muss
Diese Passage ist zunächst etwas verwirrend, aber Sie werden nach dem Lesen verstehen:
Zunächst ist die Ausnahmebichtsbeschreibung nur für die Override -Methode beteiligt, und der Konstruktor liegt offensichtlich nicht in diesem Bereich, sodass der Subklass -Konstruktor jede Ausnahme durch die Ausnahme des übergeordneten Konstruktors auswerfen kann. Wenn jedoch ein neues Subklassenobjekt ist, wird der Konstruktor der übergeordneten Klassen definitiv aufgerufen, sodass die vom Unterklassenkonstruktor genannte Ausnahme des entsprechenden übergeordneten Klassenkonstruktors berücksichtigt werden muss. Zu diesem Zeitpunkt muss der Subklass -Konstruktor diese Ausnahme auswerfen, da "der Konstruktor der Unterklasse die Ausnahme des übergeordneten Klassenkonstruktors (der später erwähnt wird)".
class eine Ausnahme erweitert die Ausnahme {} Klasse TheOTherexception erweitert die Ausnahme {} Klasse Basec {public basec () löst einige Exception aus {} public basec (int a) aus. // Super (37) ist geworfen zu werden; // Wenn Sie super () in diesem Bereich ersetzen, muss die Aotherexception geworfen werden}}2. Warum kann der Konstruktor der Unterklasse die Ausnahme des übergeordneten Klassenkonstruktors nicht aufnehmen?
Denn wenn eine Unterklasse die von der Elternklasse ausgelöste Ausnahme erfassen möchte, muss sie den Call Super () anzeigen. oder super (xxx ...); Super () und dies () haben jedoch ein Merkmal, nämlich, dass sie in die erste Zeile platziert werden müssen, was den Versuch {} catch} widerspricht, sodass es nicht erfasst werden kann
3. Wenn die von der Unterklasse geerbte übergeordnete Klasse und Schnittstelle den gleichen Methodennamen aufweist, muss die Verarbeitungsmethode der Ausnahmegrenze folgen.
class einigexception erweitert die Ausnahme {} Klasse TheOTherexception erweitert die Ausnahme {} Schnittstelle interf {public void function () löscht TheOtherexception aus; } class Basec {public void function () löst einige Exception aus. // Fehler: AUSSCHLIESSE THEOTHEREXception ist nicht mit Throws -Klausel in Basec.function () // public void function () kompatibel. }V.
Da die Unterklasse die Möglichkeit einer Aufwärtsumwandlung in die übergeordnete Klasse hat, wenn die Unterklasse Ausnahmen nach Belieben werfen darf, wird die Schnittstelle der Methode (nennen wir es, wenn die Unterklasse in die übergeordnete Klasse der Fall nennt) zum Methode -Typ der übergeordneten Klasse. Zu diesem Zeitpunkt ist das Problem, dass die Unterklasse Ausnahmen auswirft, die übergeordnete Klasse jedoch nicht mit der Ausnahme umgehen kann. Um den austauschbaren Typ des Objekts zu gewährleisten, ist es daher obligatorisch, dass "nur die in der Ausnahmebeschreibung der Basisklassenmethode aufgeführten Ausnahmen geworfen werden".
Die hier erwähnten "Ausnahmen" enthalten auch die Unter-Ausnahmen für diese Ausnahmen!
5. Ich weiß nicht, ob dies zählt. Vielleicht bin ich relativ dumm. Ich habe lange darüber nachgedacht, bevor ich es verstand. Lassen Sie es uns vorerst aufschreiben.
Klasse einige exception erweitert die Ausnahme {} Klasse Basec {public void function () löst einige Exception aus {} // Wenn die hier ausgelöste Ausnahme eine Laufzeit -Subklasse für Laufzeit ist, kann es nicht mit Ausnahme behandelt werden. Ausnahmebehandlung! /* public void function () löscht einige Exception {Super.Function (); } */ public void function () {try {super.function (); } catch (einige exception e) {e.printstacktrace (); }}}Die obige detaillierte Erklärung der Ausnahmen, an denen Vater- und Kinderklassen basierend auf Java basieren, ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.