NullPointerException
Spis treści
Wprowadzenie
NullPointerException jest wyjątkiem z grupy wyjątków nieobsługiwanych(unchecked exception), co oznacza, że nie ma obowiązku jego obsługi w miejscach, w których może wystąpić. Wyjątek dziedziczy po klasie RuntimeException i znajduje się w pakiecie java.lang więc pełna ścieżka do klasy to java.lang.NullPointerException.
Konsekwencją tego faktu jest to, że szczególnie młodym programistom sprawia on wiele trudności i bywa ciężki do wykrycia. Ogólnym powodem występowania wyjątku NullPointerExceptionjest próba odwołania się do pola obiektu lub metody poprzez niezainicjowaną zmienną.
Przykład 1
Person.java
public class Person {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
NullPointerTest.java
public class NullPointerTest {
public static void main(String[] args) {
Person p = null;
p.getName(); //wywołanie metody na wartości null
}
}
Po próbie uruchomienia programu otrzymamy wyjątek Exception in thread "main" java.lang.NullPointerException.
Przykład 2
Klasa Person pozostaje identyczna z poprzednią, jednak tym razem zobaczmy jak sprawa wygląda z tablicami.
NullPointerTest2.java
public class NullPointerTest2 {
public static void main(String[] args) {
Person[] persons = new Person[10];
persons[0].setName("Henry");
}
}
Stworzyliśmy tablicę mogącą przechowywać 10 obiektów typu Person. Problem w tym, że domyślnie tablica taka wypełniona jest wartościami null. Próba wywołania person[0].setName() jest więc równoznaczna z próbą wywołania null.setName(). Rozwiązaniem jest wypełnienie tablicy np. w pętli.
NullPointerTest2.java
public class NullPointerTest2 {
public static void main(String[] args) {
Person[] persons = new Person[10];
for(int i=0; i<persons.length; i++)
persons[i] = new Person(); //przypisujemy obiekty do tablicy
persons[0].setName("Henry");
}
}
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.