• Wir präsentieren Dir heute ein Stellenangebot für einen Java Entwickler - m/w/d in Augsburg, München, Stuttgart oder Bamberg. Hier geht es zur Jobanzeige

Meine erste eigene Exception Klasse

E

E27T

Aktives Mitglied
Moinsen, bin gerade wieder bisschen am coden und habe meine erste eigene Exception Klasse deklariert. Aufgabe ist es eigene Ausnahmeklasse zu deklarieren, mit einer dazugehörigen Klasse Person. Sofern ein Objekt dieser Klasse erzeugt wird, soll eine PersonException ausgelost werden, falls der Nachname leer ist oder das Alter kleiner als 0 oder größer als 150 gesetzt wird.

Java:
public class PlayerException extends RuntimeException{
    
    //Standardkonstruktor
    PlayerException() {}
    
    //Parametisierter Konstruktor
    PlayerException(String s) {
        super (s);
    }

}

Java:
public class Person {
    
    //Attribute
    private String vorname;
    private String nachname;
    private int alter;
    
    
    Person() {}
    
    //Konstruktor
    Person (String vorname, String nachname, int alter) {
        
        if (nachname == "" || alter < 0 || alter > 150)
        {
            throw new PlayerException ("Entweder kein Nachname oder alter < 0 ");
        }
        
        this.vorname = vorname;
        this.nachname = nachname;
        this.alter = alter;
    }

Java:
public class main {

    public static void main(String[] args) {
        
        try
        {
            Person dummy = new Person("Dagobert", "Duck", 151);
            System.out.println(dummy.getVorname() + dummy.getNachname() + dummy.getAlter());
        }
        catch (PlayerException pe)
        {
            System.out.println(pe.getMessage());
        }
    }

}

Meine Frage ist nun, was genau der super Konstruktor genau macht (Zeile 8 in meiner Klasse PlayerException). Warum muss ich hier super() aufrufen?
 
Oneixee5

Oneixee5

Bekanntes Mitglied
if (nachname == "" || alter < 0 || alter > 150) { throw new PlayerException ("Entweder kein Nachname oder alter < 0 "); }
Also wenn nachname == null dann ist das OK aber ein falscher Objektvergleich soll eine Exception werfen? Das würde ich überdenken! Leere Strings testet man mit nachname.isEmpty().
Warum werden nicht für jeden Fehlerfall eigene Texte erstellt? Zumal dein Text noch fehlerhaft ist und den Nutzern nicht hilft.
 
E

E27T

Aktives Mitglied
Zumal dein Text noch fehlerhaft ist und den Nutzern nicht hilft.
Was meinst du mit Fehlerhaft?
Also wenn nachname == null dann ist das OK
Ich will ja nur testen, ob der Benutzer keinen Nachnamen angegeben hat.
1616656427679.png



Wenn ich eine neue Person anlege und den Nachnamen nicht einfüge, meckert er, weil ich im Konstruktor gesagt habe, dass ein Vorname, Nachname und eine Alter übergeben wird. Daher dachte ich mir, dass ich das so mache..
1616656542940.png
 
kneitzel

kneitzel

Top Contributor
Also die Prüfung in dem Code funktioniert nur deshalb, weil Du beides mal dein String Literal nutzt und diese per String.intern() zu der selben Instanz wurden. Daher klappt das mit dem Vergleich der Referenzen.
Wenn Du aber nun z.B. den Nutzer den Nachnamen eingeben lässt, dann hast Du eine andere String Instanz, die dem Literal nur gleicht. Aber da Du nicht auf Gleichheit prüfst, ist das leider falsch. Du kannst es auch testen per
new Person("Hans", new String(""), 99)

Es ist wichtig zu verstehen, wieso dies Problematisch ist, denn so String Vergleiche hat man ja durchaus öfters.
Davon unabhängig ist es relativ egal, wie man den leeren String prüft. isEmpty() ist die bevorzugte Variante, weil dies gut lesbar ist.
Viele Libraries haben eine Strings oder StringUtil Klasse, und dann hat man null und leer Prüfung zusammen, also sowas wie
Strings.isNullOrEmpty(nachname)
(Z.B. guava: https://guava.dev/releases/19.0/api/docs/com/google/common/base/Strings.html)

Bezüglich der null Prüfung:
Es ist bei der Methode durchaus möglich, dass da eine null Referenz übergeben wird. Dies wäre der Aufruf:
new Person("Hans", null, 99)
So wie @Oneixee5 schon geschrieben hat, ist dies eine Prüfung, die in der Regel auch gemacht werden sollte, denn wenn das Feld ein Pflichtfeld ist, dann muss da ein String angegeben werden und dieser darf nicht leer sein. Wenn Du die Prüfung per nachname.isEmpty() machst ohne null Prüfung, bedeutet dies, dass Du bei einer Übergabe von null eine NullPointerException bekommen wirst. Da wäre dann eine Prüfung a.la."".equals(nachname) als Code denkbar, der nur den leeren String aber nicht null heraus filtern würde (Mir fällt da aber nicht wirklich ein sinnvolles Szenario ein, aber darum ging es hier ja auch weniger).

Das einfach einmal als kurze Erläuterung zu diesen zwei Punkten.
 
Oneixee5

Oneixee5

Bekanntes Mitglied
Person() {}

//Konstruktor
Person (String vorname, String nachname, int alter) {
Deine Klasse Person hat 2 Konstruktoren, in einem davon überprüfst du die Parameter und in dem anderen Fall sind die Namen null und das Alter 0. Somit ist die Überprüfung der Parameter weitestgehend sinnlos. Eine Möglichkeit wäre den Standardkonstruktor zu entfernen und die Felder final zu setzen und nur Getter anzubieten, das nennt sich dann immutable Object.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Meine erste Funktion Java Basics - Anfänger-Themen 12
A Meine erste Bibliothek erstellen Java Basics - Anfänger-Themen 24
M Meine erste Java Programmierung funzt nicht :-( Java Basics - Anfänger-Themen 34
R Meine erste Klasse: Punkt Java Basics - Anfänger-Themen 3
G Meine erste IF Abfrage Java Basics - Anfänger-Themen 11
B Sind meine If-Statements richtig angesetzt ? Java Basics - Anfänger-Themen 27
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
N Klassen Warum kann meine Klasse nicht auf Methoden der anderen Klasse zugreifen? Java Basics - Anfänger-Themen 6
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
B Warum werden meine System.out.println's übersprungen? Java Basics - Anfänger-Themen 9
W Wie kann ich meine Methode aufrufen? Java Basics - Anfänger-Themen 29
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
H Meine Tabelle befüllen in .fxml Java Basics - Anfänger-Themen 16
E Warum kann ich meine jar-Datei nicht öffnen Java Basics - Anfänger-Themen 20
WPS1000 Input/Output Wie aktiviere ich den Daten Transfer von der RS232 in meine Java Applikation Java Basics - Anfänger-Themen 2
T Rekursion Warum bricht meine Funktion nicht ab Java Basics - Anfänger-Themen 4
S Meine Java "Wahrsagerin" Java Basics - Anfänger-Themen 9
C Ich brauche hilfe für meine Klausur Java Basics - Anfänger-Themen 13
W Wie lasse ich meine Ausgabe nach dem Lesen verschwinden ? Java Basics - Anfänger-Themen 1
W Warum funktioniert meine if Anweisung nicht? Java Basics - Anfänger-Themen 8
R Meine Ratemaschine Java Basics - Anfänger-Themen 3
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3
V Erste Schritte Warum geht meine continue Anweisung nicht? Java Basics - Anfänger-Themen 8
GreenTeaYT HashMap dupliziert meine Elemente? Java Basics - Anfänger-Themen 2
B Ist meine Klasse richtig kommentiert? Java Basics - Anfänger-Themen 2
J Erste Schritte Vorsicht Spaghetti-Code! Wie verschachtel ich meine If-Anweisung??? Java Basics - Anfänger-Themen 4
snipesss Eclipse Neon findet meine Projekte nicht? Java Basics - Anfänger-Themen 1
snipesss IDE findet meine .txt Datei nicht! Java Basics - Anfänger-Themen 12
J Verstehe meine HashSet Ausgabe nicht Java Basics - Anfänger-Themen 5
E Erste Schritte [Noob] Warum geht meine For-Schleife nicht? Java Basics - Anfänger-Themen 2
E Erste Schritte [Noob-Frage] Meine If-Abfrage macht nicht, was sie soll... Java Basics - Anfänger-Themen 2
J Erste Schritte .class datei in meine form inkludieren Java Basics - Anfänger-Themen 3
D Wie bekomme ich meine Ausgabe in Form von "2^x" hin? Java Basics - Anfänger-Themen 1
Z Fibonacci rekursiv meine Erklärung stimmt so? Java Basics - Anfänger-Themen 2
Z Meine ersten Gehversuche Java Basics - Anfänger-Themen 11
Dit_ Ich kenne meine Koordinaten. Wo bin ich? Java Basics - Anfänger-Themen 2
K Klassen Meine Klasse wird nicht anerkannt Java Basics - Anfänger-Themen 7
M Suche Korrektor für meine Lösung (FH: Java1 - Übungsklausur) Java Basics - Anfänger-Themen 4
D Wie kann meine Klasse in ein JPanel zeichnen? Java Basics - Anfänger-Themen 14
J Datentypen Meine Hashliste ist nicht unique Java Basics - Anfänger-Themen 5
S OOP Wie muss meine Klasse zu dieser main aussehen? Java Basics - Anfänger-Themen 5
C Denkanstoss für meine Auswertung Java Basics - Anfänger-Themen 5
L Warum erkennt java meine methode nicht? Java Basics - Anfänger-Themen 17
S Irgendwie kann ich meine Eclipse Projekte nicht mehr veraendern..? Java Basics - Anfänger-Themen 5
M Wo sind meine double-Zahlen? Java Basics - Anfänger-Themen 2
A Hilfe meine Titel werden alle abgelehnt Java Basics - Anfänger-Themen 4
K Wieso schaltet meine CheckBox von selbst um ? Java Basics - Anfänger-Themen 31
K Warum adiert meine Methode nicht die eins ? Java Basics - Anfänger-Themen 19
K Warum wird meine Graphik zwei Mal gezeichnet ? Java Basics - Anfänger-Themen 12
Kr0e Eclips + JOGL -> Wo ist meine MAIN-Funktion hin ? Java Basics - Anfänger-Themen 9
U Habe meine .class files gelöscht. Java Basics - Anfänger-Themen 3
gummibaerchen Methode überschreibt meine Variable Java Basics - Anfänger-Themen 5
N Programm das mir anzeigt wo meine Freundin ist. Java Basics - Anfänger-Themen 10
Schandro Meine Fragensammlung Java Basics - Anfänger-Themen 9
S daten per url in meine Klasse? Java Basics - Anfänger-Themen 12
A meine eigene IO Klasse Java Basics - Anfänger-Themen 3
D Meine SetMethode geht nicht || Fenster schließen Java Basics - Anfänger-Themen 3
T Java Programm ordnet meine Objecte immer falsch an Java Basics - Anfänger-Themen 4
M wie kann ich meine Projekte auf einen stick speichern? Java Basics - Anfänger-Themen 6
S Wie ist meine Strucktur Java Basics - Anfänger-Themen 11
F Eingabe darf nur 1 oder 0 sein. Meine Lösung macht Probleme. Java Basics - Anfänger-Themen 8
A Möchte Java - Chat in meine Homepage einbinden. Java Basics - Anfänger-Themen 4
M meine ersten versuche Java Basics - Anfänger-Themen 8
M wie pack ich das swt in meine *.jar Java Basics - Anfänger-Themen 8
S ich stör schon widr wegen meine gui Java Basics - Anfänger-Themen 2
R Welches inferface und somit welche IP benutzt meine JVM? Java Basics - Anfänger-Themen 2
M Meine Java Programm hägt durch waitFor() ! HILFE! Java Basics - Anfänger-Themen 10
G wie meine java applikation installierbar machen? Java Basics - Anfänger-Themen 11
R BorderLayout macht meine Zeichnung kaputt Java Basics - Anfänger-Themen 14
A Parsen einer XML-Datei: Wo sind meine Start-Tags??? Java Basics - Anfänger-Themen 22
A Buttons für meine Homepage Java Basics - Anfänger-Themen 2
P meine java applets laufen nicht bei meinen freunden Java Basics - Anfänger-Themen 5
G Klassen: Wann initialisiere ich wo meine Variabeln Java Basics - Anfänger-Themen 6
K Mein Pc will meine Programme nicht kompilieren Java Basics - Anfänger-Themen 2
J Warum funktioniert meine Umwandlung nicht? Java Basics - Anfänger-Themen 3
G Public class??? Findet meine Klasse nicht. Java Basics - Anfänger-Themen 5
Zwanglos Warum wird nur die erste Zeile im while Block ausgeführt? Java Basics - Anfänger-Themen 8
3 OOP erste Versuche, OOP zu verstehen. Probleme mit gettern und settern Java Basics - Anfänger-Themen 4
F nur das erste Element mit iterator ausgeben Java Basics - Anfänger-Themen 5
J Objekt erste freie Stelle zuweisen Java Basics - Anfänger-Themen 3
Zrebna Compiler-Fehler Java-Compiler wird nach 'javac' keyword-Eingabe nicht gestartet (Erste Übung) Java Basics - Anfänger-Themen 18
Textsurfer Erste Schritte Ist es der erste Schleifendurchlauf? Java Basics - Anfänger-Themen 4
V Erste Schritte Hilfe gesucht beim einstieg in Java und erste Aufgaben aus der Berufsschule Java Basics - Anfänger-Themen 9
D String erste Zahl mit LKZ auslesen lassen Java Basics - Anfänger-Themen 36
C Erste Ziffer einer Zahl Java Basics - Anfänger-Themen 46
L Erste Schritte Erste Versuche mit Server und Client Java Basics - Anfänger-Themen 7
V Klassen Bestimmen Sie die erste und letzte Position an der ein 'c' steht? Java Basics - Anfänger-Themen 3
Crazynet jTable erste Zeile mit deffinierten Werten Java Basics - Anfänger-Themen 0
B Kreuzprodukt zweier Vektoren (Erste Java Aufgabe - Hilfestellungen und Tips erwünscht) Java Basics - Anfänger-Themen 4
Tarrew Generics: Erste gemeinse Oberklasse als Rückgabewert Java Basics - Anfänger-Themen 1
N InsertionSort sortiert erste Zahl im Array nicht mit? Java Basics - Anfänger-Themen 6
I String abschneiden erste und letzte Zeichen Java Basics - Anfänger-Themen 3
U Wie bekomme ich bei der Ausgabe das erste Komma weg Java Basics - Anfänger-Themen 8
S Erste App Java Basics - Anfänger-Themen 2
johnnydoe Erste Schritte Erster Blick - erste Fragen Java Basics - Anfänger-Themen 11
Farbenfroh Erste GUI Versuche Java Basics - Anfänger-Themen 1
R Java als erste Programmiersprache 5 Auflage Java Basics - Anfänger-Themen 0
N Erste Zeile bei BufferedReader doppelt lesen? Java Basics - Anfänger-Themen 2
L Das erste Mal GridBagLayout - wie geht das? Java Basics - Anfänger-Themen 5
O Erste Versuche eine Art "EventHandler" zu bauen.. Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Anzeige

Neue Themen


Oben