NullPointerException

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ą.

Kurs Java

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.