Kursinhalt
Java JUnit Bibliothek. Arten von Tests
Java JUnit Bibliothek. Arten von Tests
Ausnahmen Erstellen
Es ist an der Zeit, eigene benutzerdefinierte Ausnahmen zu erstellen, die Sie in Ihren Programmen auslösen können. Zunächst ist es wichtig zu beachten, dass es zwei Arten von Ausnahmen gibt.
Arten von Ausnahmen in Java
-
Geprüfte Ausnahmen: Dies sind Ausnahmen, die entweder abgefangen oder in der Methodensignatur deklariert werden müssen. Sie werden zur Kompilierzeit überprüft.
Beispiel:IOException
; -
Ungeprüfte Ausnahmen: Diese Ausnahmen werden nicht zur Kompilierzeit überprüft. Sie weisen normalerweise auf Programmierfehler hin, wie Logikfehler oder falsche API-Nutzung.
Beispiel:NullPointerException
.
Hinweis
Sie haben vielleicht bemerkt, dass wir bis zu diesem Punkt ungeprüfte Ausnahmen besprochen haben, da sie die Logik der Anwendung beeinflussen. In diesem Kapitel werden wir auch ungeprüfte Ausnahmen verwenden, die Fehler in der Logik einer Methode/Anwendung anzeigen.
Erstellen von benutzerdefinierten Ausnahmen
Um eine benutzerdefinierte Ausnahme in Java zu erstellen, erweitern Sie typischerweise entweder Exception
( für geprüfte Ausnahmen ) oder RuntimeException
( für ungeprüfte Ausnahmen ).
Schritte zum Erstellen einer benutzerdefinierten Ausnahme:
- Definieren Sie eine neue Klasse: Ihre Ausnahmeklasse sollte entweder
Exception
oderRuntimeException
erweitern, je nachdem, ob Sie möchten, dass es eine geprüfte oder ungeprüfte Ausnahme ist; - Konstruktorüberladung: Definieren Sie Konstruktoren für Ihre Ausnahmeklasse. Sie können mehrere Konstruktoren erstellen, um verschiedene Arten von Informationen über die Ausnahme zu übergeben ( z.B. eine einfache Nachricht oder eine andere auslösende Ursache ).
Beispiel einer benutzerdefinierten geprüften Ausnahme:
CustomCheckedException
public class CustomCheckedException extends Exception { public CustomCheckedException(String message) { super(message); } // Additional constructors can be added if needed }
Beispiel für eine benutzerdefinierte Unchecked-Ausnahme:
CustomUncheckedException
public class CustomUncheckedException extends RuntimeException { public CustomUncheckedException(String message) { super(message); } // Additional constructors can be added if needed }
Übung
Nun, lassen Sie uns ein wenig üben und unsere eigene Ausnahme erstellen, die verwendet wird, wenn der Benutzer nicht das erforderliche Alter hat, um etwas in einem Online-Shop zu kaufen. Diese Ausnahme sollte einen Namen haben, der den Fehler repräsentiert, den sie anzeigt.
Zum Beispiel NotOfLegalAgeException
oder PurchaseProhibitedException
.
Hinweis
Diese Ausnahme wird unchecked sein, da ein solcher Fehler die Logik des Programms verletzt.
Nun können wir diese Ausnahme in unserem Code verwenden und sie in Methoden werfen. Schreiben wir eine Methode, die das Alter des Benutzers überprüft und eine Ausnahme auslöst, wenn er jünger als 21 Jahre alt ist.
main
package com.example; public class Main { public static void main(String[] args) { User bob = new User("bob@bobmail.com", "Bob", "some properties..", 20); InternetShopService shopService = new InternetShopService(); shopService.order(bob, "Tequila", 21); } } class InternetShopService { public boolean checkAge(User user, int requiredAge) { return user.getAge() >= requiredAge; } public void order(User user, String item, int requiredAge) { boolean permission = checkAge(user, requiredAge); if (permission) { System.out.println("Ordered successfully!"); } else { throw new PurchaseProhibitedException( String.format("You can't buy %s till you reach %d years old", item, requiredAge)); } //database operations } // other methods } class User { private String email; private String name; private String properties; private int age; public User(String email, String name, String properties, int age) { this.email = email; this.name = name; this.properties = properties; this.age = age; } public int getAge() { return age; } } class PurchaseProhibitedException extends RuntimeException { public PurchaseProhibitedException(String message) { super(message); } }
Wie Sie sehen können, verwenden wir die erstellte Ausnahme im Code. Jetzt bleibt nur noch, diese Ausnahme zu behandeln, wenn die Methode, die sie auslöst, aufgerufen wird, und die Ausnahme-Nachricht auf der Konsole auszugeben. Wir werden dies natürlich mit einer try-catch
-Struktur tun.
main
package com.example; public class Main { public static void main(String[] args) { User bob = new User("bob@bobmail.com", "Bob", "some properties..", 20); InternetShopService shopService = new InternetShopService(); try { shopService.order(bob, "Tequila", 21); } catch (PurchaseProhibitedException e) { System.out.println("Exception caught: " + e.getMessage()); } } } class InternetShopService { public boolean checkAge(User user, int requiredAge) { return user.getAge() >= requiredAge; } public void order(User user, String item, int requiredAge) { boolean permission = checkAge(user, requiredAge); if (permission) { System.out.println("Ordered successfully!"); } else { throw new PurchaseProhibitedException( String.format("You can't buy %s till you reach %d years old", item, requiredAge)); } //database operations } // other methods } class User { private String email; private String name; private String properties; private int age; public User(String email, String name, String properties, int age) { this.email = email; this.name = name; this.properties = properties; this.age = age; } public int getAge() { return age; } } class PurchaseProhibitedException extends RuntimeException { public PurchaseProhibitedException(String message) { super(message); } }
Jetzt können Sie Ihre eigenen benutzerdefinierten Ausnahmen erstellen und in Ihrem Code auslösen. Hervorragend!
1. Was sind die zwei Haupttypen von Ausnahmen in Java?
2. Welche Klasse sollte eine benutzerdefinierte geprüfte Ausnahme erweitern?
3. Was ist ein Hauptmerkmal von unchecked exceptions in Java?
4. Was ist der Zweck der PurchaseProhibitedException
-Klasse im bereitgestellten Beispiel?
5. Was bewirkt der Aufruf von super(message)
im Konstruktor von PurchaseProhibitedException
?
Danke für Ihr Feedback!