Czy zauważyłeś wyjątek java.lang.NullPointerException (NPE)? 8 najlepszych praktyk, aby uniknąć NPE w środowisku uruchomieniowym w Javie

Opublikowany: 2020-10-07
Czy zauważyłeś wyjątek java.lang.NullPointerException (NPE)? 8 najlepszych praktyk, aby uniknąć NPE w środowisku uruchomieniowym w Javie

Unikaj wyjątku Null Pointer Exception w Javie i Java Wskazówki i najlepsze praktyki, aby uniknąć NullPointerException w Javie.

Jestem pewien, że jako programista Java musiałeś stawić czoła wyjątkowi Null Pointer Exception (NPE) od pierwszego dnia. W większości przypadków wyjątek NPE pokazuje wyraźny ślad stosu, który wskazuje pierwotną przyczynę tego samego, ale w przypadku dużych aplikacji na poziomie Enterprise, w których masz setki klas, znalezienie prawdziwej przyczyny źródłowej staje się koszmarem.

Co to jest wyjątek wskaźnika zerowego (NPE)?

NullPointerException (NPE) to wyjątek, który występuje, gdy próbujesz użyć odwołania, które wskazuje na brak lokalizacji w pamięci (null), tak jakby odwołuje się do obiektu.

Wywołanie metody na odwołaniu o null lub próba uzyskania dostępu do pola odwołania o wartości NULL spowoduje wyzwolenie NPE. To najczęstsza przyczyna.

Zgodnie z JavaDoc, poniżej znajdują się główne przyczyny NPE:

  • Zgłaszanie null tak, jakby była to wartość Throwable .
  • Wywołanie metody wystąpienia obiektu o null .
  • Uzyskiwanie dostępu lub modyfikowanie pola obiektu o null .
  • Przyjmowanie długości null tak, jakby była tablicą.
  • Uzyskiwanie dostępu do gniazd null lub modyfikowanie ich tak, jakby to była tablica.

Teraz prawdziwe pytanie brzmi: Jak uniknąć java.lang.NullPointerException w czasie wykonywania? W tym samouczku przyjrzymy się kilku przykładom, które tworzą NPE w czasie wykonywania i krokom, które musimy wykonać, aby rozwiązać ten problem.

Utwórzmy NPE w czasie wykonywania 1. Spójrz na poniższy przykład CrunchifyNullPointerExceptionTips.java

Stworzymy NPE na 3 różne sposoby

  1. NPE zostanie wyrzucony, jeśli próbujesz uzyskać dostęp do pustego obiektu
  2. NPE zostanie wyrzucony, jeśli próbujesz przekonwertować ciąg o wartości null
  3. NPE zostanie wyrzucony, jeśli próbujesz uzyskać dostęp do obiektu null podczas inicjalizacji klasy

Utwórz klasę CrunchifyNullPointerExceptionTips.java

Wynik:

Cóż, istnieje kilka wskazówek i sztuczek, których możemy użyć, aby uniknąć wyjątku NullPointerException w czasie wykonywania. Spójrzmy.

Podpowiedź 1:

Eclipse / IntelliJ IDE spróbuje pokazać NPE w obszarze roboczym. Popraw swój kod tylko podczas programowania.

Wskazówka dotycząca wskaźnika zerowego w Eclipse

Podpowiedź 2:

Dodaj crunchifyI sNullorEmpty () przed operacją na obiekcie. Dodaj to do CrunchifyNullPointerExceptionTips.java

W powyższym programie java wiersze 55 i 56 zostaną zastąpione tym.

Podpowiedź 3:

Sprawdź, czy String ma null lub empty po operacji trim().

Podpowiedź 4:

Zawsze używaj Try Catch block , aby zapobiec nieprzerwanemu procesowi w czasie wykonywania.

Podpowiedź 5:

Collections.emptyList() jest preferowana ze względu na lepszą obsługę generyków.

Podpowiedź 6:

Użyj Java Assertions

Asercja to instrukcja, która umożliwia przetestowanie założeń dotyczących kodu. Na przykład, jeśli piszesz metodę, która zwraca nazwę w systemie, możesz stwierdzić, że zwracana nazwa otherName, jeśli String ma wartość null.

Podstawowym zastosowaniem asercji byłoby:

Ale jest pewien haczyk: asercja nie jest dostępna w środowisku produkcyjnym i nie powinniśmy używać asercji z żadną logiką biznesową.

Podpowiedź 7:

Spróbuj użyć kontroli containsKey() , containsValue() , contains() .

Podpowiedź 8:

Podsumowując, zawsze dobrą praktyką jest dbanie o NPE podczas opracowywania, a raczej debugowanie w środowisku produkcyjnym w czasie wykonywania. Istnieje wiele innych wskazówek i sztuczek dostępnych przy użyciu adnotacji Spring Framework, Factory Pattern obiektu zerowego itp. Ale teraz to skrócę.

Opublikuję nowy samouczek prawdopodobnie za tydzień na ten. Bądźcie czujni.

Czy chcesz coś dodać do tego samouczka LUB znaleźć problem, włącz się i podaj swoje komentarze.