NullPointerException umgehen

dezzard

Mitglied
Guten Morgen,

ich habe ein Programm geschrieben, was einer Verwaltung gleich kommt.
Ich kann Personen hinzufügen, welche in einer ArrayList gespeichert werden.
Die Personen können verschiedene Informationen haben (Name, Vorname, Alter etc.)
Funktioniert alles wunderbar, jedoch bin ich auf Neuland gestoßen. Wenn ich einer Person keinen Vornamen gebe, sprich, dieser String null ist, schimpft mich die Konsole mit "Exception in thread "main" java.lang.NullPointerException".
War mir bis dahin unbekannt.
Habe jetzt schon mit mehreren if != null Konstruktionen versucht, den Fehler zu umgehen, komme jedoch nicht zum gewünschten Ziel.
Kann mir da jemand helfen?
Java:
package dev;

public class VerwaltungMain
{

   public static void main(String[] args)
   {

       Verwaltung vwt = new Verwaltung();

       Person p1 = new Person();
       p1.setVorname("Klaus");
       p1.setName("Hampel");
       p1.setAlter(10);
       p1.setGroeße(180);
       p1.setSchuhgroeße(44);
       p1.setLieblingsessen("Schntizel");
       vwt.addPerson(p1);

       Person p2 = new Person();
       p2.setVorname("Peter");
       p2.setName("Bla");
       p2.setAlter(20);
       p2.setGroeße(190);
       p2.setSchuhgroeße(46);
       p2.setLieblingsessen("Pizza");
       vwt.addPerson(p2);

       Person p3 = new Person();
       p3.setVorname("Hans");
       p3.setName("Meier");
       p3.setAlter(30);
       p3.setGroeße(160);
       p3.setSchuhgroeße(40);
       p3.setLieblingsessen("Steak");
       vwt.addPerson(p3);

       Person p4 = new Person();
       p4.setVorname("Franz");
       p4.setName("Ferdinand");
       p4.setAlter(40);
       p4.setGroeße(200);
       p4.setSchuhgroeße(50);
       p4.setLieblingsessen("Döner");
       vwt.addPerson(p4);

       Person p5 = new Person();
       p5.setVorname("Klaus");
       p5.setName("Hampel");
       p5.setAlter(10);
       p5.setGroeße(180);
       p5.setSchuhgroeße(44);
       p5.setLieblingsessen("Schntizel");
       vwt.addPerson(p5);

       Person pBoese = new Person();
       // pBoese.setVorname("Klaus");
       pBoese.setName("Hampel");
       pBoese.setAlter(10);
       pBoese.setGroeße(180);
       pBoese.setSchuhgroeße(44);
       pBoese.setLieblingsessen("Schntizel");
       vwt.addPerson(pBoese);

       
       vwt.printNameAndAge();
       // vwt.printAllPersonInfos();
       System.out.println(vwt.isPersonWithFirstNameInList("Klaus"));
       System.out.println(vwt.isPersonWithFirstNameInList("Niklas"));
       System.out.println(vwt.countOfPersonsWithFirstName("Klaus"));
       System.out.println(vwt.countOfPersonsWithFirstName("Niklas"));

   }

}

Java:
package dev;

public class Person
{

   private int schuhgroeße;
   private int alter;
   private double groeße;
   private String name, vorname, lieblingsessen;

   public Person() {

   }

   public void getInfos()
   {

       System.out.println("Vorname: " + vorname);
       System.out.println("Nachname: " + name);
       System.out.println("Alter: " + alter);
       System.out.println("Größe: " + groeße);
       System.out.println("Schuhgröße: " + schuhgroeße);
       System.out.println("Lieblingsessen: " + lieblingsessen);
   }

   public String getString()
   {
       return "Vorname: " + vorname + "\nNachname: " + name + "\nAlter: "
               + alter + "\nGröße: " + groeße + "\nSchuhgröße: " + schuhgroeße
               + "\nLieblingsessen: " + lieblingsessen;
   }

   public int getSchuhgroeße()
   {
       return schuhgroeße;
   }

   public void setSchuhgroeße(int schuhgroeße)
   {
       this.schuhgroeße = schuhgroeße;
   }

   public int getAlter()
   {
       return alter;
   }

   public void setAlter(int alter)
   {
       this.alter = alter;
   }

   public double getGroeße()
   {
       return groeße;
   }

   public void setGroeße(double groeße)
   {
       this.groeße = groeße;
   }

   public String getName()
   {
       return name;
   }

   public void setName(String name)
   {
       this.name = name;
   }

   public String getVorname()
   {
       return vorname;
       
   }

   public void setVorname(String vorname)
   {
       this.vorname = vorname;
   }

   public String getLieblingsessen()
   {
       return lieblingsessen;
   }

   public void setLieblingsessen(String lieblingsessen)
   {
       this.lieblingsessen = lieblingsessen;
   }
   
   
   
}

Java:
package dev;

import java.util.ArrayList;
import java.util.List;

public class Verwaltung
{
   private List<Person> personen = new ArrayList<Person>();

   public void addPerson(Person person2BeAdded) // Person bezieht sich auf
                                                   // Klasse Person!!!
   {
       personen.add(person2BeAdded);
   }
   
   
   

   public void printNameAndAge()
   {
       
       
       
       for (Person currentPerson : personen)
       {
           
           System.out.println("Vorname: " + currentPerson.getVorname());
           System.out.println("Nachname: " + currentPerson.getName());
           System.out.println("Alter: " + currentPerson.getAlter());
           System.out.println();
       }
   }

   public void printAllPersonInfos()
   {
       for (Person currentPerson : personen)
       {
           System.out.println("Vorname: " + currentPerson.getVorname());
           System.out.println("Nachname: " + currentPerson.getName());
           System.out.println("Alter: " + currentPerson.getAlter());
           System.out.println("Körpergröße: " + currentPerson.getGroeße());
           System.out.println("Schugröße: " + currentPerson.getSchuhgroeße());
           System.out.println("Lieblingsessen: "
                   + currentPerson.getLieblingsessen());
           System.out.println();
       }
   }

   public boolean isPersonWithFirstNameInList(String firstName2BeLookingFor)
   {
       boolean result = false;
       for (Person currentPerson : personen)
       {
           if (currentPerson.getVorname().equals(firstName2BeLookingFor)) // TODO null kann keine methode aufrufen -- getVorname darf nicht leer sein
           {
               result = true;

           }
       }
       return result;
   }

   public int countOfPersonsWithFirstName(String firstName2BeCounted)
   {
       
       if (firstName2BeCounted == null)
       {
           return 0;
       }else{
           int counter = 0;
           for (Person currentPerson : personen)
           {
               if (currentPerson.getVorname().equals(firstName2BeCounted))
               {
                   counter++;

               }
           }
           return counter;
       }
       
   }

}
 

Robat

Top Contributor
Du könntest im Konstruktor den Namen einfach mit einem Leerstring initialisieren ( name = "" ;)
Wobei ich mal hinterfragen würde warum eine Person keinen Vornamen haben darf.

Edit: ich würde es auch für besser empfinden die relevanten Daten einer Person im Konstruktor zu übergeben a la Person p = new Person(name, vorname,..)
 

dezzard

Mitglied
Wobei ich mal hinterfragen würde warum eine Person keinen Vornamen haben darf.

Ich mach aktuell eine Ausbildung und mein Ausbilder gab mir diese Aufgabe. Als er meinen Code sah, sagte er, dass er mit nur einer Zeile mein Programm zum stoppen bringen könnte und raus kam die NullPointerException....

Du könntest im Konstruktor den Namen einfach mit einem Leerstring initialisieren ( name = "" ; )

Wenn ich das richtig verstehe, ist der String dann nicht null, sondern nur mit einem Whitespace befüllt.
Denke nicht, dass das für meinen Ausbilder zufriedenstellend wäre :/
 

Thallius

Top Contributor
Man sollte halt generell vor der Verwendung einer Variable testen ob diese gesetzt ist, auch wenn das heutzutage wohl irgendwie aus der Mode gekommen ist.
Also vorname nur benutzen wenn es != null ist. Das bedeutet natürlich deutlich mehr Code in getString() aber das ist dann die saubere Art.
 

Robat

Top Contributor
Zum Beispiel darfst du in isPersonWithFirstNameInList() nur auf Gleichheit prüfen wenn der Name (getVorname()) nicht null ist.
Das gleiche gilt für alle anderen Stellen, wo du auf Strings, die potentiell Null sein können, eine Methode aufrufst.
 

dezzard

Mitglied
Zum Beispiel darfst du in isPersonWithFirstNameInList() nur auf Gleichheit prüfen wenn der Name (getVorname()) nicht null ist.

Danke für den Tipp, bei printNameAndAge() hat das wunderbar funktioniert :)

Java:
    public boolean isPersonWithFirstNameInList(String firstName2BeLookingFor)
   {
       boolean result = false;
       for (Person currentPerson : personen)
       {
           if (currentPerson.getVorname().equals(firstName2BeLookingFor) && currentPerson.getVorname() != null) // TODO null kann keine methode aufrufen -- getVorname darf nicht leer sein
           {
               result = true;

           }
       }
       return result;

Aber hier allerdings nicht... Warum geht es bei der einen Methode und bei dieser nicht?
 

Robat

Top Contributor
Du musst erst auf null prüfen und danach benutzen. Die Bedingungen werden in der Reihenfolge ausgeführt wie du sie hinschreibst
 

mihe7

Top Contributor
Wenn ich das richtig verstehe, ist der String dann nicht null, sondern nur mit einem Whitespace befüllt.
Denke nicht, dass das für meinen Ausbilder zufriedenstellend wäre :/

Das ist kein Whitespace sondern eine leere Zeichenkette. Unabhängig davon kann es natürlich sein, dass es Deinem Ausbilder gerade um die Behandlung von null geht. Trotzdem ist es grundsätzlich richtig, Instanzvariablen, die ein Objekt referenzieren sollen, mit einem solchen zu initialisieren: null ist weder ein Objekt, noch eine Referenz auf ein solches.
 

dezzard

Mitglied
Habe es jetzt so gelöst, dass ich die Werte direkt dem Konsturktor übergebe.

Java:
Person p1 = new Person("Max", "Mustermann", 26, 184, 44, "Schnitzel");

Im Konstruktor habe ich noch mit if Anweisungen abgefangen, dass null zum "empty String" wird, denn ich kann dem Konstruktor ja auch folgendes übergeben:

Java:
Person p1 = new Person(null, "Mustermann", 26, 184, 44, "Schnitzel");

Habe ich dann so gelöst(innerhalb des Konstruktors):

Java:
if (vorname != null)
       {
           this.vorname = vorname;

       } else
       {
           this.vorname = "empty String";
       }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Wie kann ich diese NullPointerException umgehen?! Java Basics - Anfänger-Themen 41
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
H Liste Knoten NullPointerException Java Basics - Anfänger-Themen 7
C Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 10
LePetitChat1 Arrays - NullPointerException? Java Basics - Anfänger-Themen 14
berserkerdq2 Nullpointerexception, obwohl ich Array initialisiere? Java Basics - Anfänger-Themen 1
U Warum gibt das eine Nullpointerexception? (Switch) Java Basics - Anfänger-Themen 6
missy72 Klassen Objekt Array NullPointerException Java Basics - Anfänger-Themen 3
Jose05 Nullpointerexception Java Basics - Anfänger-Themen 7
emx-zee Erste Schritte NullPointerException, Array mit zufälligen Zahlen füllen Java Basics - Anfänger-Themen 2
Jose05 Nullpointerexception bei Umwandlung von String zu int Java Basics - Anfänger-Themen 2
H Java NullPointerException Java Basics - Anfänger-Themen 4
YaU Vererbung erstellt NullPointerException? Java Basics - Anfänger-Themen 4
D Hilfe beim Erzeugen eines Arrays NullPointerException wird ausgelöst Java Basics - Anfänger-Themen 11
L Threads Komischer NullPointerException Java Basics - Anfänger-Themen 2
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
Avalon NullPointerException beim Mocken Java Basics - Anfänger-Themen 6
D NullPointerException in foreach loop Java Basics - Anfänger-Themen 1
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
T Bufferedwriter code Nullpointerexception Java Basics - Anfänger-Themen 4
D NullPointerException im Array Java Basics - Anfänger-Themen 4
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
J NullPointerException beim Klonnen eines Arayys und beim aufrufen einer Methode Java Basics - Anfänger-Themen 2
V NullPointerException Java Basics - Anfänger-Themen 2
S NullPointerException während ResultSet Java Basics - Anfänger-Themen 7
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
scratchy1 NullPointerException Java Basics - Anfänger-Themen 19
U Was löst meine NullPointerException aus? (Vererbung) Java Basics - Anfänger-Themen 12
dapzoo Compiler-Fehler Beim Werte verteilen in Objektarray NullPointerException Java Basics - Anfänger-Themen 4
W Optional<T> - NullPointerException Java Basics - Anfänger-Themen 37
Jascha NullPointerException vs NumberFormatException Java Basics - Anfänger-Themen 5
L Variablen NullPointerException bei Dateigröße (Nr.1) Java Basics - Anfänger-Themen 4
M Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 13
Z Objekt Array führt zum NullPointerException Java Basics - Anfänger-Themen 2
W NullPointerException obwohl nicht null? Java Basics - Anfänger-Themen 3
W ArrayList NullPointerException Java Basics - Anfänger-Themen 4
A NullPointerException Java Basics - Anfänger-Themen 6
S NullPointerException Java Basics - Anfänger-Themen 4
T OOP Wörterbuch NullPointerException Java Basics - Anfänger-Themen 4
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
O NullPointerException Java Basics - Anfänger-Themen 2
M Interpreter-Fehler Feld NullPointerException Java Basics - Anfänger-Themen 4
L Variablen Unerklärliche NullPointerException Java Basics - Anfänger-Themen 2
E Compiler-Fehler nullPointerException in verschachteltem Modell Java Basics - Anfänger-Themen 6
DaCrazyJavaExpert Threads NullPointerException Java Basics - Anfänger-Themen 8
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
kodela NullPointerException Java Basics - Anfänger-Themen 12
R Taschenrechner NullPointerException Java Basics - Anfänger-Themen 1
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
H NullPointerException obwohl Objekt angelegt wurde Java Basics - Anfänger-Themen 1
A Threads Reentrantlock | NullpointerException möglicher Deadlock? Java Basics - Anfänger-Themen 0
K Compiler-Fehler NullPointerException lösen Java Basics - Anfänger-Themen 16
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
P Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 1
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S Methoden Methode funktioniert nicht | NullPointerException Java Basics - Anfänger-Themen 6
F NullpointerException bei zweidimensionalem Array Java Basics - Anfänger-Themen 2
Z OOP - Array ständig NullPointerException Java Basics - Anfänger-Themen 4
J Verstehe die NullPointerException nicht Java Basics - Anfänger-Themen 1
T Nullpointerexception und es wird nichts angezeigt Java Basics - Anfänger-Themen 15
H NullPointerException, aber wieso? Java Basics - Anfänger-Themen 5
B ProcessMessage NullPointerException Java Basics - Anfänger-Themen 11
shiroX Compiler-Fehler NullPointerException Java Basics - Anfänger-Themen 9
MrSnake ItemListener mit NullPointerException Java Basics - Anfänger-Themen 3
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
M NullPointerException Java Basics - Anfänger-Themen 8
B Vererbung NullPointerException Java Basics - Anfänger-Themen 38
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
G NullPointerException Java Basics - Anfänger-Themen 1
J NullpointerException Java Basics - Anfänger-Themen 1
M Interpreter-Fehler Nullpointerexception trotz Ordentlicher Initialisierung Java Basics - Anfänger-Themen 4
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M String-Vergleich und NullPointerException Java Basics - Anfänger-Themen 4
D Java Fehler: NullPointerException Java Basics - Anfänger-Themen 1
M Vergleich zweier Array Stellen mit equals/NullpointerException Java Basics - Anfänger-Themen 9
X Problem mit NullPointerException Java Basics - Anfänger-Themen 2
K NullPointerException in der Hashtable Java Basics - Anfänger-Themen 4
S Interpreter-Fehler Hilfestellung bei einer NullPointerException Java Basics - Anfänger-Themen 1
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
L NullPointerException Java Basics - Anfänger-Themen 11
M Nullpointerexception??? Java Basics - Anfänger-Themen 2
W NullPointerException bei DefaultListModel Java Basics - Anfänger-Themen 5
N NullPointerException bei Konsolenausgabe Java Basics - Anfänger-Themen 5
J Klasse in Klasse; NullPointerException Java Basics - Anfänger-Themen 8
R NullPointerException wegen JPanel oder doch nicht ? Java Basics - Anfänger-Themen 7
Q NullPointerException Java Basics - Anfänger-Themen 5
H NullPointerException Java Basics - Anfänger-Themen 5
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K NullPointerException wird geworfen, bitte um Hilfe! Java Basics - Anfänger-Themen 7
O Objekt weitergeben Meth Class NullPointerException Java Basics - Anfänger-Themen 2
J Char-Array - NullPointerException Java Basics - Anfänger-Themen 3
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Array wird nicht übernommen NullPointerException Java Basics - Anfänger-Themen 6
S Datentypen List.toString wirft NullPointerException Java Basics - Anfänger-Themen 5
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
H Compiler-Fehler NullPointerException bei .length, Konstruktor fehlerhaft? Java Basics - Anfänger-Themen 3
B JRadioButton wechsel gibt NullPointerException Java Basics - Anfänger-Themen 2
L NullPointerException lösen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben