Baza Wiedzy

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 NullPointerException jest próba odwołania się do pola obiektu lub metody poprzez niezainicjowaną zmienną.

Kurs programowania 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");
 	}
 }

 

Najlepszy newsletter o Javie w Polsce

Czy chcesz otrzymywać nowości ze świata Javy oraz przykładowe pytania rekrutacyjne? Zapisz się na newsletter i bądź na bieżąco! Otrzymasz także ekskluzywne materiały oraz informacje o nowych kursach i promocjach.

Nikomu nie udostępniamy Twojego maila, a jeśli zechcesz to w każdej chwili możesz się wypisać.

Komentarze do artykułu

Wyłączyliśmy możliwość dodawania komentarzy. Poniżej znajdziesz archiwalne wpisy z czasów gdy strona była jeszcze hobbystycznym blogiem. Zapraszamy natomiast do zadawnia pytań i dyskusji na naszej grupe na facebooku.