Rückblick – Validierter Benutzer
Teil des Abschnitts Objektorientierte Programmierung der Java-Journey von Coddy. Lektion 63 von 87.
Aufgabe
EinfachLass uns ein vollständiges Benutzerregistrierungssystem erstellen, das Eingabedaten validiert und benutzerdefinierte Ausnahmen verwendet, um genau mitzuteilen, was schiefgelaufen ist! Du wirst alles aus diesem Kapitel kombinieren: benutzerdefinierte geprüfte und ungeprüfte Ausnahmen, die Ausnahmehierarchie und try-with-resources mit einem automatisch schließbaren Validator.
Du wirst deinen Code auf fünf Dateien verteilen:
ValidationException.java: Erstelle eine geprüfte Ausnahme, die als Basis für alle Validierungsfehler dient. Diese Ausnahme sollteExceptionerweitern und einen Konstruktor enthalten, der eine Nachricht akzeptiert.InvalidUsernameException.java: Erstelle eine geprüfte Ausnahme für Fehler bei der Benutzernamenvalidierung. Sie sollte deine KlasseValidationExceptionerweitern und so eine kleine Ausnahmehierarchie bilden. Füge einen Konstruktor hinzu, der eine Nachricht akzeptiert und sie an die übergeordnete Klasse weitergibt.InvalidAgeException.java: Erstelle eine ungeprüfte Ausnahme für altersbezogene Fehler (z. B. negative Altersangaben, die Programmierfehler darstellen). Sie sollteRuntimeExceptionmit einem Konstruktor erweitern, der eine Nachricht akzeptiert.UserValidator.java: Erstelle eine Klasse, dieAutoCloseableimplementiert, um eine Validierungssitzung zu simulieren, die ordnungsgemäß geschlossen werden sollte. Dein Validator sollte:Im Konstruktor
Validator session startedausgeben.Eine Methode
validateUsername(String username)besitzen, dieInvalidUsernameExceptionauslöst, wenn der Benutzername null, leer oder kürzer als 3 Zeichen ist (mit der Nachricht"Username must be at least 3 characters"). Gib andernfallsUsername '[username]' is validaus.Eine Methode
validateAge(int age)besitzen, dieInvalidAgeExceptionauslöst, wenn das Alter negativ ist (mit der Nachricht"Age cannot be negative: [age]"). Wenn das Alter kleiner als 13 ist, löseValidationExceptionmit der Nachricht"Must be at least 13 years old"aus. Gib andernfallsAge [age] is validaus.close()implementieren, sodassValidator session closedausgegeben wird.Main.java: Führe dein Validierungssystem zusammen! Du erhältst zwei Eingaben: einen Benutzernamen (String) und ein Alter (Ganzzahl).Verwende try-with-resources, um einen
UserValidatorzu erstellen. Validiere innerhalb des try-Blocks zuerst den Benutzernamen und anschließend das Alter. Wenn beide Prüfungen erfolgreich sind, gibUser registration successful!aus.Fange
InvalidUsernameExceptionab und gibUsername error: [message]aus. FangeInvalidAgeExceptionab und gibAge error: [message]aus. FangeValidationException(die übergeordnete Ausnahme) ab und gibValidation error: [message]aus.Der Validator sollte unabhängig davon, ob die Validierung erfolgreich ist oder fehlschlägt, automatisch geschlossen werden!
Du erhältst zwei Eingaben in dieser Reihenfolge: Benutzername (String) und Alter (Ganzzahl).
Diese Herausforderung führt das gesamte Kapitel zusammen: Du wirst eine Ausnahmehierarchie mit ValidationException als übergeordneter Klasse erstellen, sowohl geprüfte als auch ungeprüfte Ausnahmen angemessen verwenden und sicherstellen, dass deine Validator-Ressource mit try-with-resources immer bereinigt wird. Beachte, wie das Abfangen der übergeordneten Ausnahme ValidationException nach ihrer untergeordneten Ausnahme InvalidUsernameException es dir 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 Schlüsselwort thisMethodenFelder (Attribute)KonstruktormethodeÜberladen von KonstruktorenRückblick – Einfacher Taschenrechner4Vererbung
Grundlegende Vererbung (extends)Das Schlüsselwort superÜberschreiben von Methoden (@Override)KonstruktorverkettungDie Object-KlasseEinfach- und mehrstufige VererbungWarum keine Mehrfachvererbung von KlassenRückblick – Mitarbeiterhierarchie7Spezielle Methoden & Object-Klasse
toString()-Methodeequals() und hashCode()clone()-MethodecompareTo() und ComparableComparator-SchnittstelleRückblick – Benutzerdefinierte Sortierung10Exception Handling in OOP
Hierarchie der Exception-KlassenBenutzerdefinierte ExceptionsGeprüfte vs. ungeprüfte FehlerTry-with-Resources-MusterRückblick – Validierter Benutzer2Zugriffsmodifikatoren & Kapselung
Übersicht der ZugriffsebenenGetter- und Setter-MethodenInformationsverbergungDas Schlüsselwort finalRückblick – Bankkontoverwaltung5Polymorphismus
Grundlagen der MethodenüberladungMethodenüberschreibung (Laufzeit)Upcasting und DowncastingDer instanceof-OperatorAbstrakte Klassen und MethodenRückblick – Formrechner8Fortgeschrittene OOP-Konzepte
Komposition vs. VererbungAggregation vs. KompositionInnere, verschachtelte & anonyme KlassenEnums und Enum-MethodenRecords (Java 16+)Versiegelte Klassen (Java 17+)11Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterBuilder-MusterObserver-MusterStrategie-Muster14Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungsdienst3Klassen-Props & statische Member
Instanz- vs. statische VariablenStatische MethodenStatische BlöckeKonstanten (static final)Wiederholung – Counter & Utility6Schnittstellen & abstrakte Klassen
Einführung in InterfacesInterfaces implementierenMehrere Interfaces implementierenDefault & Static in InterfacesAbstrakte Klassen vs. InterfacesFunktionale InterfacesRückblick – ZahlungssystemÜbe selbstständig: Online-Java-Compiler