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

Object myObject = null;

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

myObject.toString();

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.
    if (myOvject != null) {
      myOvject.toString();
    }
  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:
    Optional<String> op = Optional.ofNullable(string);
    if(op.isPresent()) {
      op.get();
    }
    

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.

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *