Szkolenia programowania we Wrocławiu
Kurs Java Podstawy - rozszerzony

NullPointerException

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

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.serName(). 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");
	}
}

 

Komentarze

Komentarze zamknięte. Zapraszamy do grupy na Facebooku