Recap – Validierter Benutzer
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy — Lektion 63 von 87.
Aufgabe
EinfachLassen Sie uns ein vollständiges Benutzerregistrierungssystem erstellen, das Eingabedaten validiert und benutzerdefinierte Exceptions verwendet, um genau zu kommunizieren, was schiefgelaufen ist! Sie werden alles aus diesem Kapitel kombinieren: benutzerdefinierte Checked und Unchecked Exceptions, die Exception-Hierarchie und Try-with-Resources mit einem Auto-Closeable-Validator.
Sie werden Ihren Code über fünf Dateien organisieren:
ValidationException.java: Erstellen Sie eine Checked Exception, die als Basis für alle Validierungsfehler dient. Diese Exception sollteExceptionerweitern und einen Konstruktor enthalten, der eine Nachricht akzeptiert.InvalidUsernameException.java: Erstellen Sie eine Checked Exception für Fehler bei der Benutzernamen-Validierung. Diese sollte IhreValidationException-Klasse erweitern und so eine kleine Exception-Hierarchie bilden. Fügen Sie einen Konstruktor hinzu, der eine Nachricht akzeptiert und diese an das Elternelement weitergibt.InvalidAgeException.java: Erstellen Sie eine Unchecked Exception für altersbezogene Fehler (wie negative Altersangaben, die Programmierfehler darstellen). Diese sollteRuntimeExceptionerweitern und einen Konstruktor enthalten, der eine Nachricht akzeptiert.UserValidator.java: Erstellen Sie eine Klasse, dieAutoCloseableimplementiert, um eine Validierungssitzung zu simulieren, die ordnungsgemäß geschlossen werden sollte. Ihr Validator sollte:Im Konstruktor
"Validator session started"ausgeben.Eine Methode
validateUsername(String username)haben, die eineInvalidUsernameExceptionwirft, wenn der Benutzername null, leer oder kürzer als 3 Zeichen ist (mit der Nachricht"Username must be at least 3 characters"). Andernfalls geben Sie"Username '[username]' is valid"aus.Eine Methode
validateAge(int age)haben, die eineInvalidAgeExceptionwirft, wenn das Alter negativ ist (mit der Nachricht"Age cannot be negative: [age]"). Wenn das Alter weniger als 13 Jahre beträgt, werfen Sie eineValidationExceptionmit der Nachricht"Must be at least 13 years old". Andernfalls geben Sie"Age [age] is valid"aus.Implementieren Sie
close(), um"Validator session closed"auszugeben.Main.java: Führen Sie Ihr Validierungssystem zusammen! Sie erhalten zwei Eingaben: einen Benutzernamen (String) und ein Alter (Integer).Verwenden Sie Try-with-Resources, um einen
UserValidatorzu erstellen. Validieren Sie innerhalb des Try-Blocks zuerst den Benutzernamen und dann das Alter. Wenn beides erfolgreich ist, geben Sie"User registration successful!"aus.Fangen Sie
InvalidUsernameExceptionab und geben Sie"Username error: [message]"aus. Fangen SieInvalidAgeExceptionab und geben Sie"Age error: [message]"aus. Fangen SieValidationException(das Elternelement) ab und geben Sie"Validation error: [message]"aus.Der Validator sollte automatisch geschlossen werden, unabhängig davon, ob die Validierung erfolgreich ist oder fehlschlägt!
Sie erhalten zwei Eingaben in der folgenden Reihenfolge: Benutzername (String) und Alter (Integer).
Diese Herausforderung führt das gesamte Kapitel zusammen: Sie bauen eine Exception-Hierarchie mit ValidationException als Basisklasse auf, verwenden sowohl Checked als auch Unchecked Exceptions angemessen und stellen sicher, dass Ihre Validator-Ressource mit Try-with-Resources immer bereinigt wird. Beachten Sie, wie das Abfangen der übergeordneten ValidationException nach ihrem Kind InvalidUsernameException es Ihnen ermöglicht, zuerst spezifische Fälle zu behandeln und dennoch andere Validierungsfehler abzufangen!
Probier es selbst
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Eingaben lesen
String username = scanner.nextLine();
int age = scanner.nextInt();
// TODO: Verwende try-with-resources, um einen UserValidator zu erstellen
// Innerhalb des try-Blocks:
// 1. Validiere den username
// 2. Validiere das age
// 3. Wenn beides erfolgreich ist, gib "User registration successful!" aus
// TODO: Fange InvalidUsernameException ab und gib "Username error: [message]" aus
// TODO: Fange InvalidAgeException ab und gib "Age error: [message]" aus
// TODO: Fange ValidationException (parent) ab und gib "Validation error: [message]" aus
// Note: Der Validator sollte automatisch geschlossen werden, unabhängig von Erfolg oder Misserfolg!
}
}
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in die OOPKlassen vs. ObjekteDas this-SchlüsselwortMethodenFelder (Attribute)Konstruktor-MethodeKonstruktor-ÜberladungRückblick – Einfacher Taschenrechner4Vererbung
Grundlagen der Vererbung (extends)Das super-SchlüsselwortMethoden überschreiben (@Override)Konstruktor-VerkettungDie Object-KlasseEinfache & mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenZusammenfassung - Mitarbeiter-Hierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-InterfaceZusammenfassung – Benutzerdefiniertes Sortieren10Ausnahmebehandlung in OOP
Exception-KlassenhierarchieBenutzerdefinierte ExceptionsChecked vs. Unchecked ErrorsTry-With-Resources-PatternRecap – Validierter Benutzer2Zugriffsmodifikatoren & Kapselung
Überblick über ZugriffsebenenGetter- und Setter-MethodenInformation HidingDas final-SchlüsselwortRückblick – Bankkonto-Manager5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenZusammenfassung – Formenrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, geschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Sealed Classes (Java 17+)11Design Patterns Teil 1
Einführung in Design PatternsSingleton-PatternFactory-PatternBuilder-PatternObserver-PatternStrategy-Pattern14Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung3Klasseneigenschaften & Statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Zusammenfassung – Zähler & Utility6Interfaces & Abstrakte Klassen
Einführung in InterfacesInterfaces implementierenImplementierung mehrerer InterfacesDefault- & statische Methoden in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesZusammenfassung - Zahlungssystem