O stronie

Co to jest NullPointerException ?

NullPointerException – to najpopularniejszy wyjątek w języku Java. Występuje on wtedy, gdy spróbujemy wywołać jakąś metodę (operację) na obiekcie, który jest null'e. W kodzie możemy zaprezentować to w taki sposób:

Tworzymy zmienną, która wskazuje na null

wywołujemy jakąkolwiek operację korzystając ze zmiennej myObject:

otrzymujemy java.lang.NullPointerException.

NullPointerException jest więc bezpośrednio wynikiem odwoływania się do obiektu, który nie istnieje. Często nie widać tego w kodzie źródłowym, ponieważ kod w całości się kompiluje, ale podczas działania programu obiekt może nie istnieć i zostaje zwrócony wyjątek. Pośrednio jest on wynikiem istnienia wartości null w języku Java.

Referencja null została wynaleziona w latach 60-tych przez Tonego Hoare’a twórcę języka ALGOL i przez niego też nazwana The Billion Dollar Mistake”. Podobnie można nazwać NullPointerException w języku Java, ponieważ ustrzeżenie się go wymaga wiele wysiłku (odsyłam do prezentacji Tonego Hoare’a Null References: The Billion Dollar Mistake).

Przez lata programiści i twórcy różnych języków programowania wymyślali różne sposoby by się go ustrzec:

  1. null check – sprawdzanie czy dana referencja nie wskazuje na null. W kodzie występuje jako instrukcja if z odpowiednim warunkiem.
  2. Wzorzec Null Object (Null Object Pattern) – zamiast referencji null ustawiamy pusty obiekt, który ma taki sam interfejs jak docelowy obiekt, ale jego metody nie robią nic. Dzięki temu jego zachowanie jest przewidywalne
  3. Optional – w Javie 8 wprowadzono specjalny mechanizm pozwalający radzić sobie z problemem NullPointerException. Zamiast null wstawiamy specjalny obiekt Optional<T>, który może przechowywać wybrany typ lub null. Optional udostępnia nam specjalne metody .isPresent() i .get(), które pomagają na nim operować np:

Niestety, żaden z powyższych sposobów nie jest idealny. Wszystkie z nich przysparzają programistom dużo dodatkowej pracy. Najlepszym rozwiązaniem byłoby wprowadzenie sprawdzania referencji null na etapie kompilacji, tak jak zostało to rozwiązanie w języku Kotlin. Niestety w Javie chyba nie jest to możliwe, ponieważ łamałoby to kompatybilność wsteczną języka z której przecież Java słynie.

Skąd się wzięła nazwa strony NullPointeException.pl ?

Długo szukałem odpowiedniej nazwy dla strony, na której mógłbym dzielić się swoją wiedzą, a która byłaby na tyle uniwersalna, by w przyszłości rozwinąć ją w coś większego. Dni mijały a ja nadal pozostawałem bez odpowiedniej nazwy. W końcu nieubłaganie nadszedł czas decyzji i nadal nic ciekawego nie przychodziło mi do głowy. Pomyślałem, że brak pomysłu w mojej głowie to taki NullPointerException (w końcu od lat jestem programistą Javy i mimo doświadczenia nadal zmagam się z tym wyjątkiem na co dzień 🙂 ). Po chwili wydało mi się to nawet zabawne (chociaż nadal myślę, że z marketingowego punktu widzenia to słaba nazwa – ale życie pokaże). Chwilę pomyślałem nad tym i sprawdziłem, domena była dostępna. Od razu ją wykupiłem i po kilku dniach miałem już działającego bloga…

O czym jest ta strona ?

Głównie będę pisał o programowaniu w językach związanych z platformą JVM, bo Java to nie wszystko i czasem warto zobaczyć jak pewne rzeczy są rozwiązane w innych językach. W ten sposób poszerzamy sobie spojrzenie na problemy, które spotykają nas w codziennej pracy. Natomiast język Java będzie dominującym tematem w tym serwisie.

Nie zabraknie też ogólnych tematów związanych z programowaniem, takich jak obiektowość, wzorce projektowe czy algorytmy i struktury danych.

 

A jeśli chciałbyś być na bieżąco z tym, co się dzieje na stronie, zapraszam Cię do zapisania się na newsletter.

 

Mini kurs testy jednostkowe

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *