NullPointerException Ohne Grund

hallo community,

Ich hab folgende NullPointerException Fehlermeldung und weiss nun einfach nicht weiter.
Der Code müsste richtig sein

Exception in thread "main" java.lang.NullPointerException

at test.Student.setGeburtsdatum(Student.java:38)

at test.App.main(App.java:10)

bei der folgende stelle schmeiss der mir ein Fehler aus

in meine Klasse Student

Java:
public void setGeburtsdatum (int tt, int mm, int jjjj){   
        geburtsDatum.setTag(tt);  
        geburtsDatum.setMonat(mm);
        geburtsDatum.setJahr(jjjj);
       
    }

und einmal in der main

Java:
studi1.setGeburtsdatum(4,4,1992);

Ich hab in meine Klasse Student 2 Konstruktoren mit verschiedene Parameter, jedoch hab ich das Gefühl, das er nur in die eine reinspringt und deshalb die Fehlermeldung hat.

Java:
public Student (String vorname, String name, String studiengang){
       
        this.vorname = vorname;
        this.name = name;
        this.studiengang = studiengang;
       
       
    }


und die andere

Java:
public Student (String vorname, String name, String studiengang,
            int gebTag, int gebMonat,int gebJahr){
       
        this(vorname, name, studiengang);
       
        this.geburtsDatum = new Datum (gebTag, gebMonat, gebJahr);
    }

setter und getter würden für die klasse Datum auch richtig gesetzt

Ich hab in Anhang mein Code hinzugefügt.

Hoffe ihr könnt mir dabei helfen.
 

Anhänge

Wenn du einen Student OHNE Geburtsdatum erstellst, und dann den Setter fürs Geburtsdatum aufrufst, greifst du auf ein leeres geburtsDatum Objekt zu.

Mach im Setter einfach ein new Date(...) so wie beim 2. Konstruktor.
 
Entweder prüfst du im Setter ob ein Geburtsdatum vorhanden ist oder nicht (wenn nicht musst du natürlich eines erstellen).
Oder wie Maggot schon sagte in beiden Konstruktoren ein Geburtsdatum erstellen, bei den einen mit den Werten der Parameter, beim anderen mit von dir gewählten Defaultwerten.

Natürlich wäre es praktisch keinen doppelten Code zu verwenden, daher =>
Java:
public Student (String vorname, String name, String studiengang) {    
    this(vorname, name, studiengang, 1, 1, 1900);
}

public Student (String vorname, String name, String studiengang, int gebTag, int gebMonat,int gebJahr) {
    this.vorname = vorname;
    this.name = name;
    this.studiengang = studiengang;
    this.geburtsDatum = new Datum (gebTag, gebMonat, gebJahr);
}
 
in meine Main Methode hatte ich ein student mit Geburtsdatum erstellt

Code:
Student studi1 = new Student("Susi","Sonnenschein", "Wirtschaftsinformatik");
   
        studi1.setGeburtsdatum(4,4,1234);
       
        Student studi2 = new Student("Fridolin", "Froehlich", "Medieninformatik",
                                        3, 3, 1997);

Bei studi1 hätte ich gerne das es auf dem 1.Konstruktor zugreift ohne ein Geburtsdatum und dann per setGeburtsdatum ein datum erstelle und studi2 auf dem 2.Konstruktor.

Ich hatte mal studi1 rausbekommen und studi2 funktioniert.
 

Zurück
Oben