Java lang nullpointerexception button android

Устранение неполадок java.lang.NullPointerException в упражнении для Android SDK

В настоящее время я просматриваю Sams, изучая Android SDK в течение 24 часов и не могу пройти первый час из-за проблем.

Как я уже упоминал ранее, я прочитал все предложения, которые я смог найти в папке с ошибкой папки, и я сделал чистую версию без сборки, я удалил ген, а затем сделал сборку, я установил разрешения для этого чтобы он был доступен только для чтения и удостоверился, что версия SDK отмечена в соответствии с параметром пути Java Build на свойствах проектов.

Это чистая установка eclipse и Androids SDK, и я внимательно следил за инструкциями.

В дополнение к этому, я нахожу, что Eclipse/Androids SDK нестабилен, например, двойной щелчок на файле strings.xml заставляет затмение блокироваться, а затем я должен перезагрузиться или завершить работу. Когда и когда я доберусь до экрана Android Resources для файла strings.xml, я получаю эту ошибку:

Пожалуйста, помогите кому-нибудь помочь, поскольку я действительно хочу выучить этот язык, но на данный момент не получаю больше, чем привет мир!.

Райан благодарит за ваш ответ. Когда я впервые установил eclipse, он был на 3.5. С помощью adk это не устанавливается через eclipse для установки нового программного обеспечения через меню окна в eclipse?

Книга довольно актуальна, поскольку она говорит об 2.1 Android, и я следил за googles и инструкциями из книги и не вижу различий. Когда я впервые установил это все, я выполнил инструкции googles, и я ударил проблему сборки. Java и заблокировал ее. Затем я решил установить его снова с нуля и, следуя книге, загрузил eclipse IDE java ee разработчиков

Майку – не то, что я заметил, ты не считаешь, что это вирус?

Последний вопрос по этому вопросу – я установил версию 3.5 non EE, и, хотя я больше не получаю ошибки в построении, я по-прежнему обнаруживаю, что интерфейс eclipse иногда зависает.

Я думаю, что проблема, с которой я столкнулась с eclipse и т.д., была моей программой A/V Kaspersky, так как смена этого, похоже, не вызывает никаких проблем.

Спасибо за каждый вклад в это.

Если вы импортируете проекты make файла напрямую, произойдет ошибка “NullPoint Exception”, правильным способом будет: сначала создать проект make файла, а затем скопировать ваши файлы во вновь созданный проект. Постройте его.

Источник

Ошибка 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), то рекомендую выполнить следующее:

  1. Переустановите пакет Java на своём компьютере. Скачать пакет можно, к примеру, вот отсюда;
  2. Переустановите саму проблемную программу (или удалите проблемное обновление, если ошибка начала появляться после такового);
  3. Напишите письмо в техническую поддержку программы (или ресурса) с подробным описанием проблемы и ждите ответа, возможно, разработчики скоро пофиксят баг.
  4. Также, в случае проблем в работе игры Майнкрафт, некоторым пользователям помогло создание новой учётной записи с административными правами, и запуск игры от её имени.

Для разработчиков

Разработчикам стоит обратить внимание на следующее:

Источник

Как исправить ошибку java.lang.nullpointerexception?

В этом посте я покажу наглядный пример того, как исправить ошибку исключения Null Pointer (java.lang.nullpointerexception). В Java особое значение null может быть назначено для ссылки на объект и означает, что объект в данный момент указывает неизвестную область данных.

NullPointerException появляется, если программа обращается или получает доступ к объекту, а ссылка на него равна нулю (null).

Это исключение возникает следующих случаях:

  • Вызов метода из объекта значения null.
  • Доступ или изменение объекта поля null.
  • Принимает длину null(если бы это был массив Java).
  • Доступ или изменение ячеек объекта null.
  • Показывает «0», значение Throwable.
  • При попытке синхронизации по нулевому объекту.

NullPointerException является RuntimeException, и, таким образом, компилятор Javac не заставляет вас использовать блок try-catch для соответствующей обработки.

Зачем нам нужно значение null?

Как уже упоминалось, null – это специальное значение, используемое в Java. Это чрезвычайно полезно при кодировании некоторых шаблонов проектирования, таких как Null Object pattern и шаблон Singleton pattern.

Шаблон Singleton обеспечивает создание только одного экземпляра класса, а также направлен на предоставление глобального доступа к объекту.

Например, простой способ создания не более одного экземпляра класса – объявить все его конструкторы как частные, а затем создать открытый метод, который возвращает уникальный экземпляр класса:

В этом примере мы объявляем статический экземпляр класса Singleton. Этот экземпляр инициализируется не более одного раза внутри метода getInstance.

Обратите внимание на использование нулевого значения, которое разрешает создание уникального экземпляра.

Как избежать исключения Null Pointer

Чтобы решить и избежать исключения NullPointerException, убедитесь, что все ваши объекты инициализированы должным образом, прежде чем использовать их.

Когда вы объявляете ссылочную переменную, вы должны создать указатель на объект и убедиться, что указатель не является нулевым, прежде чем запрашивать метод или поле у ​​объекта.

Читайте также:  Как красиво оформить главный экран андроид

Кроме того, если выдается исключение, используйте информацию, находящуюся в трассировке стека исключения. Трассировка стека выполнения обеспечивается JVM, чтобы включить отладку. Найдите метод и строку, в которой было обнаружено исключение, а затем выясните, какая ссылка равна нулю в этой конкретной строке.

Опишем некоторые методы, которые имеют дело с вышеупомянутым исключением. Однако они не устраняют проблему, и программист всегда должен быть осторожен.

  1. Сравнение строк с литералами

Очень распространенный случай, выполнения программы включает сравнение между строковой переменной и литералом. Литерал может быть строкой или элементом Enum.

Вместо того, чтобы вызывать метод из нулевого объекта, рассмотрите возможность вызова его из литерала. Например:

Приведенный выше фрагмент кода вызовет исключение NullPointerException. Однако, если мы вызываем метод из литерала, поток выполнения продолжается нормально:

  1. Проверка аргументов метода

Перед выполнением вашего собственного метода обязательно проверьте его аргументы на наличие нулевых значений.

В противном случае вы можете вызвать исключение IllegalArgumentException.

  1. Предпочтение метода String.valueOf() вместо of toString()

Когда код вашей программы требует строковое представление объекта, избегайте использования метода toString объекта. Если ссылка вашего объекта равна нулю, генерируется исключение NullPointerException.

Вместо этого рассмотрите возможность использования статического метода String.valueOf, который не выдает никаких исключений и «ноль», если аргумент функции равен нулю.

  1. Используйте Ternary Operator

Ternary Operator – может быть очень полезным. Оператор имеет вид:

boolean expression ? value1 : value2;

Сначала вычисляется логическое выражение. Если выражение true, то возвращается значение1, в противном случае возвращается значение2. Мы можем использовать Ternary Operator для обработки нулевых указателей следующим образом:

String message = (str == null) ? «» : str.substring(0, 10);

Переменная message будет пустой, если ссылка str равна нулю. В противном случае, если str указывает на фактические данные, в сообщении будут первые 10 символов.

  1. создайте методы, которые возвращают пустые коллекции вместо нуля.

Очень хорошая техника – создавать методы, которые возвращают пустую коллекцию вместо нулевого значения. Код вашего приложения может перебирать пустую коллекцию и использовать ее методы и поля. Например:

  1. Воспользуйтесь классом Apache’s StringUtils.

Apache’s Commons Lang – это библиотека, которая предоставляет вспомогательные утилиты для API java.lang, такие как методы манипулирования строками.

Примером класса, который обеспечивает манипулирование String, является StringUtils.java, который спокойно обрабатывает входные строки с нулевым значением.

Вы можете воспользоваться методами: StringUtils.isNotEmpty, StringUtils.IsEmpty и StringUtils.equals, чтобы избежать NullPointerException. Например:

  1. Используйте методы: contains(), containsKey(), containsValue()

Если в коде вашего приложения используется Maps, рассмотрите возможность использования методов contains, containsKey и containsValue. Например, получить значение определенного ключа после того, как вы проверили его существование на карте:

System.out.println(value.toString()); // В приведенном выше фрагменте мы не проверяем, существует ли на самом деле ключ внутри карты, и поэтому возвращаемое значение может быть нулевым. Самый безопасный способ следующий:

  1. Проверьте возвращаемое значение внешних методов

На практике очень часто используются внешние библиотеки. Эти библиотеки содержат методы, которые возвращают ссылку. Убедитесь, что возвращаемая ссылка не пуста.

Утверждения очень полезны при тестировании вашего кода и могут использоваться, чтобы избежать выполнения фрагментов кода. Утверждения Java реализуются с помощью ключевого слова assert и выдают AssertionError.

Обратите внимание, что вы должны включить флажок подтверждения JVM, выполнив его с аргументом -ea. В противном случае утверждения будут полностью проигнорированы.

Примером использования утверждений Java является такая версия кода:

Если вы выполните приведенный выше фрагмент кода и передадите пустой аргумент getLength, появится следующее сообщение об ошибке:
Exception in thread «main» java.lang.AssertionError
Также вы можете использовать класс Assert предоставленный средой тестирования jUnit.

Модульные тесты могут быть чрезвычайно полезны при тестировании функциональности и правильности вашего кода. Уделите некоторое время написанию пары тестовых примеров, которые подтверждают, что исключение NullPointerException не возникает.

Существующие безопасные методы NullPointerException

Доступ к статическим членам или методам класса

Когда ваш вы пытаетесь получить доступ к статической переменной или методу класса, даже если ссылка на объект равна нулю, JVM не выдает исключение.

Это связано с тем, что компилятор Java хранит статические методы и поля в специальном месте во время процедуры компиляции. Статические поля и методы связаны не с объектами, а с именем класса.

Несмотря на тот факт, что экземпляр SampleClass равен нулю, метод будет выполнен правильно. Однако, когда речь идет о статических методах или полях, лучше обращаться к ним статическим способом, например, SampleClass.printMessage ().

Оператор instanceof

Оператор instanceof может использоваться, даже если ссылка на объект равна нулю.

Оператор instanceof возвращает false, когда ссылка равна нулю.

В результате, как и ожидалось:

Not an instance of the String class!

Смотрите видео, чтобы стало понятнее.

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим — напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Источник

Что такое исключение NullPointerException и как его исправить?

Что такое исключения Null Pointer ( java.lang.NullPointerException ) и что их вызывает?

Какие методы / инструменты можно использовать для определения причины, чтобы исключить исключение из-за преждевременного прекращения работы программы?

Когда вы объявляете ссылочную переменную (то есть объект), вы действительно создаете указатель на объект. Рассмотрим следующий код, в котором вы объявляете переменную примитивного типа int :

В этом примере переменная x является int и Java инициализирует ее для 0. Когда вы назначаете его 10 во второй строке, ваше значение 10 записывается в ячейку памяти, на которую указывает x.

Но, когда вы пытаетесь объявить ссылочный тип, происходит что-то другое. Возьмите следующий код:

Первая строка объявляет переменную с именем num , но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что тип Integer является ссылочным типом). Поскольку вы еще не сказали, что указать на Java, он устанавливает значение null, что означает «Я ничего не указываю».

Во второй строке ключевое слово new используется для создания (или создания) объекта типа Integer, а переменной-указателю num присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования . (точка).

Exception о котором вы просили, возникает, когда вы объявляете переменную, но не создаете объект. Если вы попытаетесь разыменовать num создания объекта, вы получите NullPointerException . В самых тривиальных случаях компилятор поймает проблему и сообщит вам, что «num может не быть инициализировано», но иногда вы пишете код, который напрямую не создает объект.

Например, у вас может быть следующий метод:

В этом случае вы не создаете объект obj , скорее предполагая, что он был создан до doSomething метода doSomething . К сожалению, этот метод можно вызвать следующим образом:

В этом случае obj равно null. Если метод предназначен для того, чтобы что-то сделать с переданным объектом, целесообразно бросить NullPointerException потому что это ошибка программиста, и программисту понадобится эта информация для целей отладки.

Читайте также:  Панцер генерал для андроид

В качестве альтернативы могут быть случаи, когда цель метода заключается не только в том, чтобы работать с переданным объектом, и поэтому нулевой параметр может быть приемлемым. В этом случае вам нужно будет проверить нулевой параметр и вести себя по-другому. Вы также должны объяснить это в документации. Например, doSomething может быть записано как:

Наконец, как определить местоположение исключения и вызвать использование Stack Trace

Исключение NullPointerException – это исключения, возникающие при попытке использовать ссылку, указывающую на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет NullPointerException . Они наиболее распространены, но другие способы перечислены на странице javadoc NullPointerException .

Вероятно, самый быстрый пример кода, который я мог бы придумать, чтобы проиллюстрировать NullPointerException , будет:

В первой строке внутри main я явно устанавливаю ссылку Object obj равной нулю. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обрабатывать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, указывающая на нуль, не совпадает с указателем на C, указывающим на недопустимую ячейку памяти. Нулевой указатель буквально не указывает нигде , что существенно отличается от Указывая на то место, которое оказалось недействительным.)

Что такое исключение NullPointerException?

Хорошим местом для начала является JavaDocs . Они охватывают:

Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  • Вызов метода экземпляра нулевого объекта.
  • Доступ или изменение поля нулевого объекта.
  • Принимая длину null, как если бы это был массив.
  • Доступ или изменение слотов null, как если бы это был массив.
  • Бросание нулевого значения, как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другое незаконное использование нулевого объекта.

Также бывает, что если вы попытаетесь использовать нулевую ссылку с synchronized , это также вызовет это исключение для JLS :

  • В противном случае, если значение Expression равно null, NullPointerException .

Как это исправить?

Итак, у вас есть NullPointerException , как вы его исправить? Возьмем простой пример, который вызывает NullPointerException

Определите нулевые значения

Первый шаг – точно определить, какие значения вызывают исключение . Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace . Это покажет вам, где было выбрано исключение:

Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения являются нулевыми, добавив инструкции ведения журнала или используя отладчик . Мы выясним, что s равно null, и вызов метода length на нем вызывает исключение. Мы видим, что программа перестает бросать исключение, когда s.length() удаляется из метода.

Трассировка, в которой эти значения исходят из

Затем проверьте, откуда взялось это значение. Следуя вызовам метода, мы видим, что s передается с помощью printString(name) в методе print() , и this.name имеет значение null.

Трассировка, где эти значения должны быть установлены

Где это задано? В setName(String) . С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте порядок вызова этих методов, а метод set не вызывается после метода печати.

Этого достаточно, чтобы дать нам решение: добавьте вызов printer.setName() перед вызовом printer.print() .

Другие исправления

Переменная может иметь значение по умолчанию (и setName может помешать ей установить значение null):

Либо метод print либо printString может проверять значение null , например:

Или вы можете создать класс так, чтобы name всегда имело ненулевое значение :

Смотрите также:

  • Избежать операторов «! = Null» в Java?

Я все еще не могу найти проблему

Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но не забудьте включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE ).

Вопрос: Что вызывает NullPointerException ?

Как вы должны знать, типы Java делятся на примитивные типы ( boolean , int т. Д.) И ссылочные типы . Типы ссылок в Java позволяют использовать специальное значение null которое является способом Java, говорящим «no object».

NullPointerException во время выполнения, когда ваша программа пытается использовать null как если бы она была реальной ссылкой. Например, если вы пишете это:

Оператор, помеченный как «ЗДЕСЬ», попытается запустить метод length() в null ссылке, и это вызовет NullPointerException .

Существует много способов использования null значения, которое приведет к NullPointerException . Если факт, единственное, что вы можете сделать с null без возникновения NPE, это:

  • Назначить его ссылочной переменной или прочитать ее из ссылочной переменной,
  • Назначьте его элементу массива или прочитайте его из элемента массива (если эта ссылка массива не равна нулю!),
  • Передать его в качестве параметра или вернуть его в результате или
  • Протестируйте его с помощью операторов == или != Или instanceof .

Вопрос: Как мне узнать стек NPE?

Предположим, что я компилирую и запускаю программу выше:

Первое наблюдение: компиляция завершается успешно! Проблема в программе НЕ является ошибкой компиляции. Это ошибка времени выполнения . (Некоторые IDE могут предупредить, что ваша программа всегда будет генерировать исключение … но стандартный javac компилятор не делает этого.)

Второе наблюдение: когда я запускаю программу, она выводит две строки «gobbledy-gook». НЕПРАВИЛЬНО!! Это не ласково. Это stacktrace … и он предоставляет важную информацию , которая поможет вам отслеживать ошибку в вашем коде, если вы потратите время, чтобы прочитать ее внимательно.

Поэтому давайте посмотрим, что говорит:

Первая строка трассировки стека сообщает вам несколько вещей:

  • Он сообщает вам имя потока Java, в котором было выбрано исключение. Для простой программы с одним потоком (как этот) она будет «основной». Давайте двигаться дальше …
  • Он сообщает вам полное имя исключения, которое было выбрано; Т.е. java.lang.NullPointerException .
  • Если в исключении имеется связанное сообщение об ошибке, это будет выводиться после имени исключения. В этом отношении NullPointerException необычно, потому что оно редко имеет сообщение об ошибке.

Вторая строка является наиболее важной при диагностике NPE.

Это говорит нам о нескольких вещах:

  • «В Test.main» говорится, что мы были в main методе класса Test .
  • «Test.java:4» дает исходное имя файла для класса, и он сообщает нам, что оператор, где это произошло, находится в строке 4 файла.
Читайте также:  Обои для asus андроид

И если вы подсчитаете строки в файле выше, строка 4 – это та, которую я обозначил комментарием «ЗДЕСЬ».

Обратите внимание, что в более сложном примере в трассе стека NPE будет много строк. Но вы можете быть уверены, что вторая строка (первая строка «на линии») сообщит вам, куда был выброшен NPE 1 .

Короче говоря, stacktrace скажет нам однозначно, какой из программ программы бросил NPE.

1 – Не совсем верно. Есть вещи, называемые вложенными исключениями …

Вопрос: Как определить причину исключения NPE в моем коде?

Это трудная часть. Короткий ответ заключается в применении логического вывода к доказательствам, предоставленным трассировкой стека, исходным кодом и соответствующей документацией API.

Давайте сначала проиллюстрируем простым примером (см. Выше). Мы начинаем с рассмотрения строки, о которой нам рассказали stacktrace, где происходит NPE:

Как это может вызвать NPE?

На самом деле существует только один способ: это может произойти только в том случае, если foo имеет значение null . Затем мы пытаемся запустить метод length() на null и … BANG!

Но (я слышал, вы говорите), что, если NPE был брошен в вызов метода length() ?

Хорошо, если это произойдет, стек будет выглядеть по-другому. В первой строке «at» будет указано, что исключение было выбрано в некоторой строке в классе java.lang.String , а строка 4 Test.java была бы второй строкой «at».

Итак, откуда это произошло? В этом случае это очевидно, и очевидно, что нам нужно сделать, чтобы исправить это. (Назначьте ненулевое значение для foo )

Хорошо, так что давайте попробуем немного более хитрый пример. Для этого потребуется некоторый логический вывод .

Итак, теперь у нас есть 2 строки «на линии». Первая – для этой строки:

А вторая – для этой строки:

Итак, глядя на первую строчку, как это может вызвать NPE? Фактически, есть два способа:

  • Если значение bar равно null тогда bar[pos] будет вызывать NPE.
  • Если значение bar[pos] равно null то вызов length() на нем вызовет NPE.

Поэтому нам нужно выяснить, какой из этих сценариев объясняет, что происходит на самом деле. Давайте начнем с изучения первого:

Откуда берётся bar ? Это параметр вызова метода test , и если мы посмотрим, как был вызван test , мы можем видеть, что он исходит из статической переменной foo . И мы ясно видим, что мы инициализировали foo на ненулевое значение. Этого достаточно, чтобы условно отвергнуть это объяснение. (Теоретически, что-то еще может изменить foo на null … но здесь этого не происходит).

Так что насчет второго сценария? Хорошо, мы видим, что pos равно 1 , поэтому это означает, что foo[1] должен быть null . Это возможно?

В самом деле! И в этом проблема. Когда мы инициализируем так:

Мы выделяем String[] с двумя элементами , которые инициализируются null . И тогда мы не изменили содержимое foo … так что foo[1] все равно будет null .

Исключение нулевого указателя возникает, когда вы разыскиваете переменную, указывающую на null . См. Следующий код:

Исключение нулевого указателя бросается, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра null объекта.
  2. Доступ или изменение поля null объекта.
  3. Принимая длину null как если бы это был массив.
  4. Доступ или изменение слотов null как если бы это был массив.
  5. Бросание null как если бы это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другое незаконное использование null объекта.

Указатель NULL – это тот, который указывает на никуда. Когда вы разыскиваете указатель p , вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p , nowhere указано, вы говорите« дайте мне данные в месте «Нигде». Очевидно, он не может этого сделать, поэтому он NULL pointer exception .

В общем, это потому, что что-то не было правильно инициализировано.

Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы вообще исключить NullPointerException .

См. Также: Хороший список лучших практик

Я бы добавил, очень важно, использовать final модификатор.
Использование «окончательного» модификатора, когда это применимо в java

Резюме:

  1. Используйте final модификатор для обеспечения хорошей инициализации.
  2. Избегайте возвращать null в методах, например, возвращая пустые коллекции, когда это применимо.
  3. Использовать аннотации @NotNull и @Nullable
  4. Быстрое завершение работы и использование утверждений, чтобы избежать распространения нулевых объектов через все приложение, если они не должны быть нулевыми.
  5. Сначала используйте значения с известным объектом: if(«knownObject».equals(unknownObject)
  6. Предпочитают значение valueOf() над toString ().
  7. Использовать null безопасные методы StringUtils.isEmpty(null) .

В Java все вещи находятся в форме класса.

Если вы хотите использовать любой объект, то у вас есть две фазы

  • Декларация: int a;
  • Инициализация: a=0;

То же самое для концепции Array

  • Декларация: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дали раздел NullpointerException возникает NullpointerException .

Исключение с нулевым указателем – это индикатор того, что вы используете Object без его инициализации.

Например, ниже – класс студентов, который будет использоваться в нашем коде.

Ниже код дает вам исключение нулевого указателя.

Поскольку вы используете Obj_Student но вы забыли его инициализировать, как показано на рисунке ниже.

В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не сами объекты.

Когда вы пытаетесь выполнить один метод объекта, ссылка запрашивает у живого объекта выполнение этого метода. Но если ссылка ссылается на NULL (ничего, ноль, void, nada), то нет способа, которым метод будет выполнен. Затем среда выполнения сообщит вам об этом, выбросив исключение NullPointerException.

Ваша ссылка «указывает» на нуль, таким образом «Null -> Pointer».

Объект живет в пространстве памяти VM, и единственный доступ к нему – this использование this ссылок. Возьмем следующий пример:

Это важно знать – когда больше нет ссылок на объект (в приведенном выше примере, когда ссылка «reference» и «otherReference» указывает на null), объект «недоступен». Мы не можем работать с ним, поэтому этот объект помечен для сбора мусора, и в какой-то момент VM освободит память, используемую этим объектом, и выделит другую.

Другое появление NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разглядеть элементы внутри него.

Этот конкретный NPE можно избежать, если порядок сравнения будет отменен; А именно, использовать .equals на гарантированном ненулевом объекте.

Все элементы внутри массива инициализируются общим общим значением ; Для любого типа массив объектов, это означает, что все элементы равны null .

Вы должны инициализировать элементы в массиве перед тем, как получить доступ к ним или разблокировать их.

Источник

Оцените статью