- Исключение NullPointerException Java – Обнаружение, исправление и рекомендации
- ява.ланг.Исключение NullPointerException-одно из самых популярных исключений в программировании на Java. Любой, кто работает на java, должен был видеть, как это появляется из ниоткуда в автономной программе java, а также в веб-приложении java .
- Примеры исключений NullPointerException Java
- 1. Исключение NullPointerException при вызове метода экземпляра
- 2. Исключение Java NullPointerException при доступе/изменении поля нулевого объекта
- 3. Исключение Java NullPointerException при передаче значения null в аргументе метода
- 4. java.язык.Исключение NullPointerException, когда выбрасывается значение null
- 5. Исключение NullPointerException при получении длины массива null
- 6. Исключение NullPointerException при доступе к значению индекса нулевого массива
- 7. Исключение NullPointerException при синхронизации с нулевым объектом
- 8. Статус HTTP 500 java.lang.Исключение NullPointerException
- Как определить java.lang.Исключение NullPointerException
- Как исправить исключение NullPointerException
- Рекомендации по кодированию, чтобы избежать исключения NullPointerException
- Читайте ещё по теме:
- Ошибка java.lang.nullpointerexception, как исправить?
- Что это за ошибка java.lang.nullpointerexception
- Как исправить ошибку java.lang.nullpointerexception
- Для пользователей
- Для разработчиков
- Заключение
Исключение NullPointerException Java – Обнаружение, исправление и рекомендации
ява.ланг.Исключение NullPointerException является наиболее распространенным исключением в Java. Давайте рассмотрим примеры исключений NullPointerException, как их обнаружить и исправить.
ява.ланг.Исключение NullPointerException-одно из самых популярных исключений в программировании на Java. Любой, кто работает на java, должен был видеть, как это появляется из ниоткуда в автономной программе java, а также в веб-приложении java .
ява.ланг.Исключение NullPointerException-одно из самых популярных исключений в программировании на Java. Любой, кто работает на java, должен был видеть, как это появляется из ниоткуда в автономной программе java, а также в веб-приложении java .
Исключение NullPointerException является исключением во время выполнения, поэтому нам не нужно перехватывать его в программе. Исключение NullPointerException возникает в приложении, когда мы пытаемся выполнить какую-либо операцию над null , где требуется объект. Некоторые из распространенных причин исключения NullPointerException в программах Java являются:
- Вызов метода в экземпляре объекта, но во время выполнения объект равен нулю.
- Доступ к переменным экземпляра объекта, который является нулевым во время выполнения.
- Выбрасывание null в программе
- Доступ к индексу или изменение значения индекса массива, который равен нулю
- Проверка длины массива, который является нулевым во время выполнения.
Примеры исключений NullPointerException Java
Давайте рассмотрим некоторые примеры исключения NullPointerException в программах java.
1. Исключение NullPointerException при вызове метода экземпляра
public class Temp < public static void main(String[] args) < Temp t = initT(); t.foo("Hi"); >private static Temp initT() < return null; >public void foo(String s) < System.out.println(s.toLowerCase()); >>
Когда мы запускаем вышеуказанную программу, она выдает следующее сообщение об ошибке NullPointerException.
Exception in thread "main" java.lang.NullPointerException at Temp.main(Temp.java:7)
Мы получаем исключение NullPointerException в операторе t.foo(«Привет»); потому что “t” здесь равно нулю.
2. Исключение Java NullPointerException при доступе/изменении поля нулевого объекта
public class Temp < public int x = 10; public static void main(String[] args) < Temp t = initT(); int i = t.x; >private static Temp initT() < return null; >>
Приведенная выше программа выдает следующую трассировку стека исключений NullPointerException.
Exception in thread "main" java.lang.NullPointerException at Temp.main(Temp.java:9)
Исключение NullPointerException создается в операторе int.x; , потому что “t” здесь равно нулю.
3. Исключение Java NullPointerException при передаче значения null в аргументе метода
public class Temp < public static void main(String[] args) < foo(null); >public static void foo(String s) < System.out.println(s.toLowerCase()); >>
Это одно из наиболее распространенных случаев использования java.lang.Исключение NullPointerException потому что вызывающий объект передает аргумент null.
На приведенном ниже рисунке показано исключение нулевого указателя, когда вышеуказанная программа выполняется в среде IDE Eclipse.
4. java.язык.Исключение NullPointerException, когда выбрасывается значение null
Ниже приведена трассировка стека исключений вышеупомянутой программы, показывающая исключение NullPointerException из-за оператора throw null; .
Exception in thread "main" java.lang.NullPointerException at Temp.main(Temp.java:5)
5. Исключение NullPointerException при получении длины массива null
Exception in thread "main" java.lang.NullPointerException at Temp.main(Temp.java:7)
6. Исключение NullPointerException при доступе к значению индекса нулевого массива
Exception in thread "main" java.lang.NullPointerException at Temp.main(Temp.java:7)
7. Исключение NullPointerException при синхронизации с нулевым объектом
synchronized(мьютекс) вызовет исключение NullPointerException, поскольку объект “мьютекс” равен нулю.
8. Статус HTTP 500 java.lang.Исключение NullPointerException
Иногда мы получаем ответ на страницу с ошибкой от веб – приложения java с сообщением об ошибке “HTTP Status 500-Внутренняя ошибка сервера” и основной причиной как java.lang.Исключение NullPointerException .
Для этого я отредактировал пример проекта Spring MVC и изменил метод HomeController, как показано ниже.
@RequestMapping(value = «/user», method = RequestMethod.POST) public String user(@Validated User user, Model model)
На рисунке ниже показано сообщение об ошибке, вызванное ответом веб – приложения.
Вот трассировка стека исключений:
HTTP Status 500 – Internal Server Error Type Exception Report Message Request processing failed; nested exception is java.lang.NullPointerException Description The server encountered an unexpected condition that prevented it from fulfilling the request. Exception org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872) javax.servlet.http.HttpServlet.service(HttpServlet.java:661) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) Root Cause java.lang.NullPointerException com.journaldev.spring.controller.HomeController.user(HomeController.java:38) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.lang.reflect.Method.invoke(Method.java:498)
Основной причиной является исключение NullPointerException в инструкции user.getUserId().toLowerCase() потому что user.getUserId() возвращает значение null.
Как определить java.lang.Исключение NullPointerException
Обнаружить исключение NullPointerException очень просто, просто посмотрите на трассировку исключений, и она покажет вам имя класса и номер строки исключения. Затем посмотрите на код и посмотрите, что может быть null, вызывающим исключение NullPointerException. Просто посмотрите на все вышеприведенные примеры, из трассировки стека очень ясно, что вызывает исключение nullpointerexception.
Как исправить исключение NullPointerException
ява.ланг.Исключение NullPointerException является непроверенным исключением, поэтому нам не нужно его ловить. Исключения нулевого указателя можно предотвратить с помощью проверок на нуль и методов превентивного кодирования. Посмотрите на приведенные ниже примеры кода, показывающие, как избежать java.lang.Исключение NullPointerException .
if(mutex ==null) mutex =»»; //preventive coding synchronized(mutex)
//using null checks if(user!=null && user.getUserName() !=null) < System.out.println("User Name: "+user.getUserName().toLowerCase()); >if(user!=null && user.getUserName() !=null)
Рекомендации по кодированию, чтобы избежать исключения NullPointerException
1. Давайте рассмотрим приведенную ниже функцию и рассмотрим сценарий, вызывающий исключение нулевого указателя.
Исключение NullPointerException может возникнуть, если аргумент передается как null. Тот же метод можно записать, как показано ниже, чтобы избежать исключения NullPointerException.
2. Мы также можем добавить нулевую проверку аргумента и выбросить Исключение IllegalArgumentException при необходимости.
public int getArrayLength(Object[] array)
3. Мы можем использовать тернарный оператор, как показано в приведенном ниже примере кода.
String msg = (str == null) ? "" : str.substring(0, str.length()-1);
4. Используйте метод String.valueOf() вместо метода toString () . Например, проверьте, что код метода PrintStream println() определен следующим образом.
public void println(Object x) < String s = String.valueOf(x); synchronized (this) < print(s); newLine(); >>
Приведенный ниже фрагмент кода показывает пример, в котором метод valueOf() используется вместо toString().
Object mutex = null; //prints null System.out.println(String.valueOf(mutex)); //will throw java.lang.NullPointerException System.out.println(mutex.toString());
5. Напишите методы, возвращающие пустые объекты, а не пустые, где это возможно, например, пустой список, пустую строку и т. Д.
6. В классах коллекций определены некоторые методы, чтобы избежать исключения NullPointerException, вы должны их использовать. Например, содержит(), содержит () и содержит значение().
Читайте ещё по теме:
Ошибка java.lang.nullpointerexception, как исправить?
Ряд пользователей (да и разработчиков) программных продуктов на языке Java могут столкнуться с ошибкой java.lang.nullpointerexception (сокращённо NPE), при возникновении которой запущенная программа прекращает свою работу. Обычно это связано с некорректно написанным телом какой-либо программы на Java, требуя от разработчиков соответствующих действий для исправления проблемы. В этом материале я расскажу, что это за ошибка, какова её специфика, а также поясню, как исправить ошибку java.lang.nullpointerexception.
Что это за ошибка java.lang.nullpointerexception
Появление данной ошибки знаменует собой ситуацию, при которой разработчик программы пытается вызвать метод по нулевой ссылке на объект. В тексте сообщения об ошибке система обычно указывает stack trace и номер строки, в которой возникла ошибка, по которым проблему будет легко отследить.
Что в отношении обычных пользователей, то появление ошибки java.lang.nullpointerexception у вас на ПК сигнализирует, что у вас что-то не так с функционалом пакетом Java на вашем компьютере, или что программа (или онлайн-приложение), работающие на Java, функционируют не совсем корректно. Если у вас возникает проблема, при которой Java апплет не загружен, рекомендую изучить материал по ссылке.
Как исправить ошибку java.lang.nullpointerexception
Как избавиться от ошибки java.lang.nullpointerexception? Способы борьбы с проблемой можно разделить на две основные группы – для пользователей и для разработчиков.
Для пользователей
Если вы встретились с данной ошибкой во время запуска (или работы) какой-либо программы (особенно это касается minecraft), то рекомендую выполнить следующее:
- Переустановите пакет Java на своём компьютере. Скачать пакет можно, к примеру, вот отсюда;
- Переустановите саму проблемную программу (или удалите проблемное обновление, если ошибка начала появляться после такового);
- Напишите письмо в техническую поддержку программы (или ресурса) с подробным описанием проблемы и ждите ответа, возможно, разработчики скоро пофиксят баг.
- Также, в случае проблем в работе игры Майнкрафт, некоторым пользователям помогло создание новой учётной записи с административными правами, и запуск игры от её имени.
Для разработчиков
Разработчикам стоит обратить внимание на следующее:
- Вызывайте методы equals(), а также equalsIgnoreCase() в известной строке литерала, и избегайте вызова данных методов у неизвестного объекта;
- Вместо toString() используйте valueOf() в ситуации, когда результат равнозначен;
- Применяйте null-безопасные библиотеки и методы;
- Старайтесь избегать возвращения null из метода, лучше возвращайте пустую коллекцию;
- Применяйте аннотации @Nullable и @NotNull;
- Не нужно лишней автоупаковки и автораспаковки в создаваемом вами коде, что приводит к созданию ненужных временных объектов;
- Регламентируйте границы на уровне СУБД;
- Правильно объявляйте соглашения о кодировании и выполняйте их.
Заключение
При устранении ошибки java.lang.nullpointerexception важно понимать, что данная проблема имеет программную основу, и мало коррелирует с ошибками ПК у обычного пользователя. В большинстве случаев необходимо непосредственное вмешательство разработчиков, способное исправить возникшую проблему и наладить работу программного продукта (или ресурса, на котором запущен сам продукт). В случае же, если ошибка возникла у обычного пользователя (довольно часто касается сбоев в работе игры Minecraft), рекомендуется установить свежий пакет Java на ПК, а также переустановить проблемную программу.