1. Ereignishandling
Tatsächlich wird der Name der Ereignisverarbeitung natürlich vom Nachrichtenantwortmechanismus in MFC gedacht. Soweit ich weiß, sollten sie als die Situation südlicher Orangen und nördlicher Zitrusfrüchte angesehen werden. Ich vermute, dass die "neue Flasche" der Ereignisverarbeitung in Java die Nachrichtenantwort in MFC sein sollte.
Die sogenannten "Ereignisse" sind Änderungen wie Tastaturschlüsse, Mausklicks usw., die dazu führen, dass sich ein bestimmter Zustand aufgrund von Aktionen oder dem, auf das reagiert werden muss, entsprechend geändert werden muss. Wir können Ereignisse in Java in verschiedene Kategorien unterteilen: Schaltflächen, Maus, Tastatur, Fenster und andere Ereignisse.
Ereignisverarbeitungsmodell
1. erbter Ereignisverarbeitungsmodell (JDK1.0)
In JDK1.0 basiert die Ereignisverarbeitung auf der Erbschaft. Die Ereignisse werden zuerst an die Komponente gesendet und dann entlang der Behälterebene nach oben ausgestellt. Ereignisse, die nicht von der Komponente verarbeitet werden, verbreiten sich automatisch weiter an den Container der Komponente. -Dies scheint im Einklang mit dem ursprünglichen Ereignisreaktionsreihenfolge oder dem polymorphen Reaktionsmechanismus in MFC zu stehen, und der später erwähnte Proxy-basierte Ereignisverarbeitungsmechanismus scheint mit dem MFC-Rückrufmechanismus übereinzustimmen.
Spezifische Behandlungsmethoden
Rufen Sie die Methode Action () oder handleEvent () auf, um die Ereignisse zu erhalten, die beim Ausführen des Programms auftreten, und alle Ereignisse, die in der Komponente auftreten, werden in dieser Methode behandelt.
2. Agentenbasierte Ereignisverarbeitungsmodell (JDK1.1)
In diesem Modell werden Ereignisse direkt an die Komponente gesendet, die dieses Ereignis erzeugt.
Für jede Komponente werden ein oder mehrere Klassen bezeichnet, die als Hörer bezeichnet werden, die Ereignishandler enthalten, die dieses Ereignis empfangen und verarbeiten.
Der Hörer ist eine Klasse, die die Höreroberfläche implementiert. Ereignisse sind Objekte, die nur an registrierte Zuhörer gemeldet wurden. Jedes Ereignis verfügt über eine entsprechende Höreroberfläche.
Beim Klicken auf das Schaltflächenobjekt mit der Maus wird ein Action -Event -Ereignis gesendet. Dieses Action -Event -Ereignis wird von der Methode ActionPerformed () aller ActionListener empfangen, die mit der Methode AddActionListener () registriert ist.
Merkmale des agentenbasierten Ereignisverarbeitungsmodells ① Ereignisse werden nicht unerwartet verarbeitet. In einem hierarchischen Modell kann sich ein Ereignis in den Container ausbreiten und auf unerwarteter Ebene verarbeitet werden.
② Es ist möglich, die Adapterklasse zu erstellen und zu verwenden, um Ereignisaktionen zu klassifizieren.
③ Es ist für die Verteilung von Arbeiten an verschiedene Kategorien förderlich.
Konzentrieren Sie sich auf das Erlernen dieses Ereignisverarbeitungsmodells
3. Ereignisse
Drei Elemente der Ereignisverarbeitung.
(1) Ereignisquelle Die Ereignisquelle ist der Generator eines Ereignisses wie Schaltflächen, Fenster und Textfelder.
. Alle Ereignisklassen erben die AwTent -Klasse und eine Methode - Getouce () -Methode, die das Objekt zurückgibt, an dem das Ereignis aufgetreten ist.
(3) Nachdem verschiedene Arten von Ereignissen im Ereignishörer aufgetreten sind, erhält der Ereignishörer das Ereignis und ruft die entsprechende Ereignisverarbeitungsmethode auf. Alle Event -Hörer sind tatsächlich eine Schnittstelle im Java.awt.Event -Paket, in der die Schnittstelle java.util.eventListener vorgestellt wird. Zuhörer verschiedener Ereignisarten haben unterschiedliche Methoden.
Ereignisverarbeitungsschritte ① Das Programm fügt das Paket java.awt.event hinzu:
Import Java.awt.event;
② Registrieren Sie einen Ereignishörer für das erforderliche Ereignisquellobjekt:
Event Source Object.addxxxListener (xxxListener);
③ Implementieren Sie die entsprechende Methode. Wenn eine Listener -Schnittstelle mehrere Methoden enthält, müssen Sie alle Methodenbeispiele implementieren: b2.addactionListener (dies).
4. Ereignisadapter (Adapter)
Die Arbeitsbelastung bei der Implementierung aller Methoden jeder Hörerschnittstelle ist sehr hoch. Die Java -Sprache bietet die Adapterklasse zur Implementierung von Klassen mit mehreren Methoden.
Der Hörer, den Sie definieren, kann die Adapterklasse erben und einfach die von Ihnen benötigten Methoden überschreiben.
Zum Beispiel ist der Listener, der dem Fensterereignis entspricht, windowListener, das mehrere Methoden implementieren muss, einschließlich WindowOned (), WindowsClesed (), WindowsClosing (), WindowiconFied (), Fensterdeiconfied (), Fensteraktivierter () und Windowsactivated (), wodurch unnötiges Programmieren die Arbeiten erhöht werden.
Wenn Sie Fensteradapter erben, müssen Sie nur eine oder einige der Methoden implementieren und nicht alle Methoden implementieren. Viele der folgenden Beispiele implementieren nur eine Methode zum Fensterklamm (), um das System beim Schließen des Fensters zu verlassen.
4.1 Handhabung von Knopfveranstaltungen
Das Ereignis, das beim Klicken auf die Schaltfläche auftritt, ist ein Aktionsereignis. Die Ereignisklasse, die dem Aktionsereignis entspricht, ist die Action -Event -Klasse. Der Ereignishörer, der dem Aktionsereignis entspricht
Die Hauptmethoden der Zuhörer:
ActionPerformed (ActionEvent e) Das Operationsprojekt, das auf dem Laufenden eines Aktionsereignisses aufgerufen wird:
Der erste Schritt besteht darin, den Action -Event -Listener AddActionListener (ActionListener) zu registrieren.
Der zweite Schritt besteht darin, die ActionListener -Schnittstellenmethode zu implementieren: ActionPerformed (ActionEvent e)
4.2 Umgang mit Mausereignissen
Die Ereignisquelle, die ein Mausereignis auslöst, ist normalerweise ein Container. Wenn die Maus in den Behälter eintritt oder verlässt oder auf die Maus klickt, die Maus usw. in den Behälter zieht, tritt das Mausereignis auf. Die Ereignisklasse, die dem Mausereignis entspricht, ist die MouseEvent -Klasse.
Methoden in der MouseEvent -Klasse:
getX () erhält die X -Koordinate der Maus
Gety () erhält die Y -Koordinate der Maus
getPoint () erhält die Maussposition und das Mausereignis entspricht zwei Ereignishörern: Mouselistener (oder Mouseadapter) entspricht dem Mausereignis, und MousemotionListener (oder MousemotionAdapter) entspricht dem Mausbewegungsereignis.
Die Hauptmethode von Mouselistener (oder Mouseadapter)
Mouseprimiert (Mouseevent e), wie man mit Maus drückt
Mousereleased (Mouseevent E), wie man mit der Mausfreisetzung umgeht
Mausented (Mouseevent e), wie man mit der Maus beim Eintritt umgeht
Mouseexited (Mouseevent E), wie man mit der Maus umgeht, wenn man geht
Mouseclicked (Mouseevent E), wie man mit Mausklick umgeht
Die Hauptmethode von MousemotionListener (oder MousemotionAdapter)
Mousemoved (MouseEvent E), wie man mit der Maus umgeht, wenn man bewegt wird
MouseDraged (Mouseevent E) Wie man mit Mausschleppen umgeht
4.3 Handhabung von Tastaturereignissen
Beim Drücken oder Freigeben der Tastatur in einer Komponente mit Tastaturfokus treten Tastaturereignisse auf. Die Ereignisklasse, die dem Tastaturereignis entspricht
Hauptmethoden der KeyEvent -Klasse:
GetKeyCode () erhält den zu drücken oder veröffentlichten Schlüsselcode
GetKeyText () erhält die Zeichenfolge der Taste gedrückt oder veröffentlicht. Der Ereignishörer, der dem Tastaturereignis entspricht
Hauptmethoden:
Tastepresse
KeyReased (KeyEvent e), wie Sie mit der Tastatur mit der Veröffentlichung umgehen
4.4 Umgang mit Fensterereignissen
Nur wenn Fenster und seine erweiterten Klassen (Rahmen, Dialogfeld) usw. ausgelöst werden können, können Sie angeben, dass sich das Fenster in einem aktiven/ungültigen Status befindet, ein Symbol/Nicht-INCON-Status oder öffnen/schließen den Status usw. Die entsprechende Klasse ist WindowEvent, und der Hörer ist WindowListener (oder Fensteradapter).
Hauptmethoden:
Fenster (WindowEvent e) Ereignishandhabung des Öffnungsfensters
Ereignisabschluss des Fensterfensters (WindowEvent e) Ereignisabschlussfenster
WindowsClosing (WindowEvent E) Schließung der Ereignisverarbeitung des Fensters
Ereignishandhabung von Fensteraktivierter (WindowEvent e) Aktivierungsstatus
Ereignisbearbeitung des ungültigen Status von Fensterdeaktiviert (WindowEvent E)
4.5 Umgang mit anderen Ereignissen
4.5.1 Die Ereignisklasse für das Kontrollkästchen und die Optionsschaltfläche Ereignisverarbeitung ist itemEvent:
Der Ereignishörer, der dem Optionsereignis entspricht
Verfahren:
itemStatEchanged (itemEvent e) wird aufgerufen, wenn das Optionsereignis auftritt 4.5.2 Die Ereignisklasse, die dem Ereignisverarbeitungsereignis der Bildlaufleistenereignis entspricht, ist die Anpassungs -Event -Klasse:
Der Event -Hörer, der dem Anpassungsereignis entspricht
Verfahren:
EinstellungsvaluEchanged (Anpassungsschutz E) wird aufgerufen, wenn ein Anpassungsereignis erfolgt
4.5.3 Die Ereignisereignisklasse in der Dropdown-Liste ist itemEvent:
Der Ereignishörer, der dem Optionsereignis entspricht
Verfahren:
itemStatEchanged (itemEvent e) wird aufgerufen, wenn eine Aktion in der Dropdown-Liste auftritt
(Es ist ersichtlich, dass die Ereignisverarbeitung der Dropdown-Liste mit dem Ereignisart, dem Ereignishörer und der Methode der Ereignis des Kontrollkästchens, des Ereignistyps, des Ereignishörers und der Methode der Ereignisverarbeitung des Radierfelds übereinstimmt.)
4.5.4 Umgang mit Menüereignissenmenüereignissen ist im Allgemeinen ein Ereignis, das beim Klicken auf einen Menüelement auftritt.
Es gibt zwei Arten von Menüelementen:
Menuitem Action Event
CheckBoxMenuitem, Optionsereignis
Der erste Schritt in der Ereignisverarbeitung von Menuitem besteht darin, den Action -Event -Listener AddActionListener (ActionListener) für alle Menu -Elemente der Menuitem zu registrieren.
Der zweite Schritt besteht darin, die ActionListener -Schnittstelle zu implementieren: actionPerformed (actionEvent e). Verwenden Sie bei dieser Methode e.getSource (), um das vom Benutzer ausgewählte Menüelement zu erhalten und die entsprechende Verarbeitung durchzuführen.
Der erste Schritt bei der Ereignisbearbeitung von CheckBoxMenuitem besteht darin, den Option Event -Listener für alle Menüelemente von CheckMenuitem an AddItemListener (ItemListener) zu registrieren.
Der zweite Schritt besteht darin, die ElementListener -Schnittstellenmethode zu implementieren: itemStatEchanged (itemEvent e). Verwenden Sie in dieser Methode e.getSource (), um das vom Benutzer ausgewählte Menüelement zu erhalten, e.getItem (), um die vom Benutzer ausgewählte Menüelemente zu erhalten, und e.getStatechange (), um zu erhalten, ob es ausgewählt ist, und die entsprechende Verarbeitung durchzuführen.
2. Ausnahmehandling
Keine gute Programmiersprache oder der Programmierer ignorieren die Handhabung von Ausnahmen. Java als populäre, objektorientierte Programmiersprache ist der Ausnahmebehörigkeitsmechanismus natürlich eines seiner wichtigen Merkmale.
Im Allgemeinen werden Ausnahmen als: Fehler in der Programmierung beschrieben. Tatsächlich ist dieser Fehler jedoch sehr häufig mit vielen Arten, wie z.
In Java ist eine Ausnahme eine Klasse, die von der Throwable -Klasse erbt. Jede Ausnahmeklasse repräsentiert einen Auslauffehler (Hinweis: Es handelt sich um einen Auslauffehler). Die Ausnahmeklasse enthält Informationen über den Betriebsfehler und die Methode zum Umgang mit dem Fehler.
Java -Ausnahmebehandlung Mechanismus:
Immer wenn ein identifizierbarer laufender Fehler während des Java -Programmvorgangs auftritt (dh wenn der Fehler eine ihm entsprechende Ausnahmeklasse enthält), generiert das System ein entsprechendes Objekt der Ausnahmeklasse (Hinweis: Es wird als Generierung eines Ausnahmeklassenobjekts bezeichnet.) Das heißt, eine Ausnahme wird generiert.
Sobald ein Ausnahmeobjekt generiert wurde, muss es im System einen entsprechenden Mechanismus geben, um sicherzustellen, dass es keine Abstürze, tote Schleifen oder andere Schäden am Betriebssystem gibt, wodurch die Sicherheit des Betriebs des gesamten Programms sichergestellt wird.
Ausnahme- und Ausnahmeklassen:
Fehler: Erzeugt und geworfen von der Java Virtual Machine, und das Java -Programm behandelt es nicht.
Laufzeitausnahme (Systemfehler wie 0, Array -Indexs überschreiten den Bereich): Das Java -Programm des Benutzers kann nicht verarbeitet werden, und das System überreicht sie dem Standard -Ausnahmebehandler (Hinweis: Es gibt eine Standardausnahmebehandlung).
Ausnahme (Probleme im Programm, vorhersehbar): Der Java-Compiler verlangt, dass das Java-Programm alle nicht-rechtzeitigen Ausnahmen fangen oder deklarieren muss, von denen Benutzer ihre eigenen Ausnahmen generieren.
Ausnahmeklassenkonstruktor:
öffentliche Ausnahme ();
öffentliche Ausnahme (String S); Kann Informationen akzeptieren, die durch String -Parameter übergeben wurden, was normalerweise eine Beschreibung des Fehlers entspricht, der der Ausnahme entspricht.
Die Ausnahmeklasse erbt auch verschiedene Methoden des Vaters, unter denen die häufig verwendeten sind:
1) Public String toString ();
Die Methode toString () gibt eine Zeichenfolge zurück, in der die aktuellen Informationen zur Ausnahmeklasse beschrieben werden.
2) Public Void PrintStacktrace ();
Die PrintStackTrace () -Methode hat keinen Rückgabewert. Seine Funktion besteht darin, einen Druckvorgang zu vervollständigen und die Stapelnutzungsspur des aktuellen Ausnahmeregelungsobjekts auf der aktuellen Standardausgabe (normalerweise auf dem Bildschirm) auszudrucken, dh das Programm ruft auf, welche Objekte oder Klassen zur Ausführung von Methoden so ausgeführt werden, dass dieses Ausnahmeobjekt während des Vorgangs generiert wird.
Systemdefinierte Betriebsausnahme
Einige dieser Unterklassen werden im Voraus vom System definiert und in die Java-Klassenbibliothek aufgenommen und als systemdefinierte Betriebsausnahmen bezeichnet
Benutzerdefinierte Ausnahmen
Für Betriebsfehler, die für eine bestimmte Anwendung eindeutig sind, müssen Programmierer benutzerdefinierte Ausnahmegementen und Ausnahmebobjekte im Benutzerprogramm gemäß der speziellen Logik des Programms erstellen. Benutzerdefinierte Ausnahmen werden normalerweise als übergeordnete Klasse der Ausnahmeklasse verwendet. Es gibt jedoch ein Problem, das noch nicht verstanden wurde: Woher weiß das System, dass ein Fehler auftritt und er erkennbar ist? Wie generiere ich entsprechende Objekte für Ausnahmeklassen? Woher wissen Sie, wie Sie das Objekt der Ausnahmeklassen mithilfe der entsprechenden Methode lösen können? Hat jedes Ausnahmeklassenobjekt, das mit der entsprechenden Ausnahme handelt, nur eine Ausnahmebehandlung? ~ ~ ~ - ——— ~ ups up
Beim Erstellen von benutzerdefinierten Ausnahmen sind im Allgemeinen die folgenden Aufgaben erforderlich:
1) Deklarieren Sie eine neue Ausnahmeklasse, damit sie die Ausnahmeklasse oder eine andere vorhandene Systemausnahmebodus oder Benutzerausnahme als übergeordnete Klasse nimmt.
2) Definieren Sie Attribute und Methoden für die neue Ausnahmeklasse oder überlasten Sie die Attribute und Methoden der übergeordneten Klasse, damit diese Attribute und Methoden die der Klasse entsprechenden Fehlerinformationen widerspiegeln können.
Ausnahme geworfen
Wenn ein Java -Programm beim Ausführen einen identifizierbaren Fehler aufwirft, generiert es ein Objekt der Ausnahmeklasse, die dem Fehler entspricht. Dieser Vorgang wird als Ausnahme -Wurf bezeichnet.
Es wirft tatsächlich eine Instanz des entsprechenden Ausnahmeklassenobjekts.
Abhängig von der Ausnahmeklasse gibt es zwei Möglichkeiten, Ausnahmen zu werfen: Systemautomatisches Wurf- und Benutzer -Werfen:
1. Das System wirft es automatisch heraus
Das System definierte Betriebsfehlerausnahmen wird automatisch vom System geworfen.
2. Benutzerwürfe
Benutzerdefinierte Ausnahmen können nicht automatisch vom System geworfen werden, sondern vom Benutzer in Java-Anweisungen geworfen werden. In Java -Aussagen wird die Wurfanweisung verwendet, um explizit eine "Ausnahme" zu werfen.
Rückgabetyp -Methodenname (Parameterliste) im Format lurerungslöste Liste von Ausnahmeklassennamen, die ausgeworfen werden sollen {{
…
Wirf eine Ausnahmeklasseninstanz; // beachten Sie hier ...
}
Beachten:
1) Im Allgemeinen wird eine Ausnahme ausgelöst, wenn im Programm ein bestimmter Zustand erfüllt wird.
Stecken Sie die Wurfanweisung oft in den IF -Zweig der IF -Aussage.
if (i> 100)
throw (new myException ());
2) Für Methoden, die Wurfanweisungen enthalten, sollten die folgenden Teile zur Definition der Methodenheader hinzugefügt werden:
Wirft die Liste der Ausnahmeklassennamen aus. Dies dient hauptsächlich dazu, die obere Methode zu informieren, um diese Methode aufzurufen und sich darauf vorzubereiten, Ausnahmen zu akzeptieren und zu handhaben, die sie während der Laufzeit werfen kann. Wenn die Methode mehr als eine Wurfanweisung enthält, sollten alle möglichen Ausnahmen in den Methoden -Header -Würfen aufgeführt werden.
3) Die Java -Sprache verlangt, dass alle mit dem Wurfs geworfenen Klassen mit dem Wurfklassen oder seiner Unterklasse deklariert wurden. Wenn Sie versuchen, ein nicht gewöhnliches Objekt zu werfen, meldet der Java -Compiler eine Fehlerausnahme:
Überlegen Sie hauptsächlich, wie Sie Ausnahmen fangen, wie man nach dem Fangen von Ausnahmen springt und wie man Ausnahmeberechnung mit Aussagen schreibt
1. Versuchen Sie… fangen… endlich blockieren
1) Versuchen Sie
Die {} in der Anweisung aus Try enthält einen Programmcode, der eine oder mehrere Ausnahmen auslösen kann. Diese Codes geben tatsächlich den Bereich der Ausnahmen an, die danach vom Fangblock erfasst werden können.
Wenn eine Ausnahme auftritt, wenn ein Java -Programm in einem Try -Block in eine Anweisung eingeht, führt es nicht mehr andere Aussagen im Try -Block aus, sondern tritt direkt in den Catch -Block ein, um den ersten Übereinstimmungstyp zu finden und ihn zu verarbeiten.
2) Block fangen
Die Parameter der Catch -Anweisung ähneln der Definition einer Methode, einschließlich eines Ausnahmetyps und eines Ausnahmeobjekts.
Der Ausnahmetyp muss eine Unterklasse der Throwable -Klasse sein, in der der Ausnahmetyp angibt, der von der Catch -Erklärung behandelt wird.
Das Ausnahmebobjekt ist der Methodencode zum Umgang mit dem Ausnahmeobjekt in den von dem Java -Laufzeitsystem geworfenen Curly -Klammern im vom Versuch angegebenen Programmcode -Block.
Es kann mehrere Fangaussagen geben, die verschiedene Arten von Ausnahmen getrennt verarbeiten.
Das Java -Laufzeitsystem erkennt den von jeder Catch -Anweisung verarbeiteten Ausnahmetyp von oben nach unten, bis es eine Fanganweisung findet, die mit ihm entspricht.
Hier ist ein Typ -Matching, dass der Ausnahmetyp in Catch genau dem Typ des generierten Ausnahmebobjekts oder der übergeordneten Klasse des Ausnahmebobjekts entspricht. Daher sollte die Sortierreihenfolge der Catch -Erklärung von Special zu General sein. (Überlegen Sie warum?)
3) Schließlich blockieren
Die endgültige Erklärung kann als Reinigungsmechanismus für Ausnahmebehandlungsereignisse vorgesehen. Es wird im Allgemeinen verwendet, um Dateien zu schließen oder andere Systemressourcen zu veröffentlichen. Die Aussage für Try-Catch-final hat möglicherweise eine Erklärung mit einem endgültigen Teil.
Wenn es keinen Teil gibt, werden andere Programmcodes nicht ausgeführt.
Wenn es einen endgültigen Teil gibt, unabhängig davon, ob eine Ausnahme im Try -Block auftritt oder ob ein Fangteil ausgeführt wurde, muss die schließlich Teilerklärung ausgeführt werden.
Es ist ersichtlich, dass der letztendlich Teil der Erklärung einen einheitlichen Ausgang für Ausnahmebehandlung liefert.
Mehrere Ausnahmen können mehrere verschiedene Ausnahmen erzeugen. Wenn Sie unterschiedliche Methoden annehmen möchten, um diese Ausnahmen zu bewältigen, müssen Sie einen Multi -Ausnahmebedingungsmechanismus verwenden.
Die Mehrfachausnahmebereich wird durch Definieren mehrerer Fangblöcke nach einem Try -Block erreicht. Jeder Fangblock wird verwendet, um ein bestimmtes Ausnahmeobjekt zu empfangen und zu verarbeiten. Durch die Parameter des Fangblocks bestimmt es, ob ein Ausnahmeobjekt eine Ausnahme sein sollte, die von diesem Fangblock empfangen und verarbeitet werden sollte.
Welcher Fangblock wird erhalten? Gemäß der Übereinstimmung der Ausnahmeparameter des Ausnahmeobjekts und des Catchblocks: Wenn sie eine der folgenden drei Bedingungen erfüllen, werden das Ausnahmegelobjekt und der Parameter übereinstimmen:
1) Das Ausnahmeobjekt gehört zur gleichen Ausnahmeklasse wie der Parameter.
2) Das Ausnahmeobjekt gehört zu einer Unterklasse der Parameter -Ausnahmeklasse.
3) Das Ausnahmeobjekt implementiert die durch die Parameter definierte Schnittstelle.
Wenn das vom Try -Block generierte Ausnahmeobjekt vom ersten Fangblock empfangen wird, springt der Fluss des Programms direkt zu diesem Catch -Anweisungsblock. Nachdem der Anweisungsblock ausgeführt wurde, wird die aktuelle Methode beendet. Aussagen, die im Try -Block und in anderen Fangblöcken nicht ausgeführt wurden, werden ignoriert. Wenn das vom Try -Block generierte Ausnahmeobjekt nicht mit dem ersten Catch -Block übereinstimmt, wird das System automatisch zum zweiten Catch -Block zum Matching geleitet. Wenn der zweite noch nicht übereinstimmt, wird er dem dritten, vierten, bis ein Fangblock, der das Ausnahmebobjekt empfangen kann, und der Prozess abgeschlossen wird.
Wenn das vom Try -Block generierte Ausnahmeobjekt vom ersten Fangblock empfangen wird, springt der Fluss des Programms direkt zu diesem Catch -Anweisungsblock. Nachdem der Anweisungsblock ausgeführt wurde, wird die aktuelle Methode beendet. Aussagen, die im Try -Block und in anderen Fangblöcken nicht ausgeführt wurden, werden ignoriert. Wenn das vom Try -Block generierte Ausnahmeobjekt nicht mit dem ersten Catch -Block übereinstimmt, wird das System automatisch zum zweiten Catch -Block zum Matching geleitet. Wenn der zweite noch nicht übereinstimmt, wird er dem dritten, vierten, bis ein Fangblock, der das Ausnahmebobjekt empfangen kann, und der Prozess abgeschlossen wird.
Wenn die Ausführung aller Aussagen im Try -Block keine Ausnahme erhöht, werden alle Fangblöcke ignoriert und nicht ausgeführt.
Beachten:
1) Die Aussagen im Catch -Block sollten unterschiedliche Operationen gemäß den verschiedenen Ausnahmen ausführen. Wenn Sie sich daher mit mehreren Ausnahmen befassen, sollten Sie darauf achten, die Anordnungsreihenfolge jedes Fangblocks sorgfältig zu entwerfen. Im Allgemeinen sollten Fangblöcke, die mit spezifischeren und gemeinsameren Ausnahmen zu tun haben, vorne platziert werden, während Fangblöcke, die mehrere Ausnahmen übereinstimmen können, hinten platziert werden.
/*Versuchen Sie, dass der Benutzer die Fehlerbehebung der Fehlerausnahme ausführt: Das Problem ist dies. Wenn der Anfangswert des Gehalts des eingegebenen Benutzers weniger als 800 beträgt, ist es falsch. Wenn die Gehaltsänderung 20%überschreitet, ist es natürlich auch falsch*/ import Java.awt.*; java.applet importieren*; import Java.awt.event.*; Public Class UsexceptionApplet erweitert Applet implementiert ActionListener {Label fordert1 = neues Label ("Bitte geben Sie den Namen und den Anfangswert des Gehalts des Mitarbeiters ein:"); Label fordert2 = neues Label ("Bitte geben Sie das zu modifizierende Gehalt ein"); Textfeldname, ISAL, NSAL; String msg; Mitarbeiter emp; Schaltfläche okBtn = neue Taste ("OK"); Button CancelBtn = neue Schaltfläche ("Abbrechen"); public void init () {name = neues Textfeld (5); ISAL = neues Textfeld (5); NSAL = neues Textfeld (5); add (prompt1); add (name); add (iSal); add (prompt2); add (NSAL); add (OKBTN); OkBtn.AddactionListener (this); CancelBtn.AddactionListener (this); add (covornBtn); } public void Paint (Grafik g) {g.drawstring (msg, 0,80); } public void createEMP (String empname, double sa) {try {emp = new Employee (Empname, SA); msg = new String (emp.toString ()); } catch (illegalaryException ist) {msg = new String (ise.toString ()); }} public void ChangeeMsal (doppelte Änderungen) {try {Emp.SetEmpSalary (Änderungen); msg = new String (emp.toString ()); } catch (illastalaryException illsal) {msg = new String (illsal.toString ()); } catch (IllasalaryChangeException illsalChange) {msg = new String (emp.toString ()+illsalChange.toString ()); }} public void actionPerformed (actionEvent e) {String empname; Doppel Empsal, Veränderungen; Objekt obj = e.getSource (); if (obj == OkBtn) {empname = new String (name.Getext ()); if (empname == null) {msg = new String ("Bitte geben Sie zuerst den Namen und das Gehalt des Mitarbeiters ein und erstellen Sie es"); } if (nSal.GeteText () == null) {empSal = double.ValueOf (isal.getText ()). DoubleValue (); CreateEMP (Empname, Empsal); } else {charechneal = double.ValueOf (nSal.GeteText ()). DoubleValue (); ChangeeMsal (Veränderungen); }} if (obj == cancesBtn) {naem.setText (""); iSal.setText (""); nSal.setText (""); } repaint (); }} Klasse Mitarbeiter {String m_empname; doppelt m_empalary; Mitarbeiter (String -Name, doppelter Anfang) löst illeSalaryException aus {m_empname = name; // Siehe, ob hier ein Problem besteht. Der Referenzcode ist m_empname = new String (Name); if (initalary <800) {throw (neue illastalaryException (this, initalary)); // throw -Anweisung} m_empalary = InitSalary; } public String getEmpname () {return m_empname; } public double getEmpSalary () {return m_empalary; } public boolean setEmpSalary (doppelter Newsal) löst IllasalaryException, IllasalaryChangeException {if (Newsal <800) Wurf (neuer IllasalaryException (this, Newsal)) aus; sonst if (get (getEmpSalary () == 0.0) {m_empsalary = Newsal; zurückkehren; } else if (math.abs (Newsal-GetEmpSalary ())/getempSalary ()> = 0,2) throw (neuer Illastalarychangexception (this, Newsal-GetempSalary ())); sonst {m_empalary = Newsal; zurückkehren; }} public String toString () {String s; s = "Name:"+m_empname+"Gehalt:"+m_empalary; Rückkehr s; }} class IllasalaryException erweitert die Ausnahme {privater Mitarbeiter m_concernedEmp; privates doppeltes m_illegalsalary; IllasalaryException (Mitarbeiter EMP, Double ISAL) {Super ("Lohn ist niedriger als Mindestlohn"); m_concernedemp = emp; M_ILLEGalsalary = ISAL; } public String toString () {String s; S = "Die Löhne für die Mitarbeiter sind illegal: Mitarbeiter:"+m_concernedemp.getempname ()+"illegales Gehalt:"+M_ILLEGalsalary+"niedriger als Mindestlohnmenge von RMB 800"; Rückkehr s; }} class illEralSalaryChangeException erweitert die Ausnahme {privater Mitarbeiter m_concernedEmp; private doppelte m_illegalsalarychange; IllasalaryChangeException (Mitarbeiter EMP, Double CSAL) (Super ("Gehaltsänderung ist zu groß"); m_concernedemp = emp; M_ILLEGalsalarychange = CSAL; } public String toString () {String s; S = "Die Lohnänderung für die Mitarbeiter ist illegal: Mitarbeiter:"+m_concernedemp.getempname ()+"illegaler Änderungsänderung:"+M_ILLEGalsalarychange+"20% höher als das ursprüngliche Gehalt"; Rückkehr s; }}