Я слышал от учителя, что большинство нарушений в будущих исследованиях являются исключениями из нулевого указателя. Так что потратьте некоторое время, чтобы играть в игры, чтобы проверить, что является исключением NULL Pointer
1: Основные причины возникновения исключений нулевого указателя заключаются в следующем:
(1) Когда объект не существует, он генерирует исключение obj.method () // Объект OBJ не существует
(2) При доступе или изменении поля, которого не существует в объекте, будет создано исключение obj.method () // Метод не существует
(3) Строковая переменная не инициализирована;
(4) Объекты типа интерфейса не инициализируются с помощью конкретных классов, таких как:
Список LT; сообщит об ошибке
Список lt = new ArrayList (); не будет ошибки
Когда значение объекта пуста, вы не судите, чтобы быть пустым. Вы можете попробовать добавить строку кода перед следующим кодом:
if (rb! = null && rb! = "")
Изменить на:
if (rb == null); if (rb! == null && rb! = "") или if ((""). equals (rb))Решение нулевого указателя:
Сосредоточьтесь на линии, где происходит ошибка, и диагностируйте конкретные ошибки по двум основным причинам, вызванным исключением NULL Pointer. В то же время, чтобы избежать возникновения нулевых указателей, лучше всего размещать «нулевые» или нулевые значения перед установленным значением при выполнении обработки суждений.
Краткий анализ общих исключений из нулевого указателя:
(1) Ошибка нулевого указателя java.lang.nullpointerException
В Java есть 8 основных типов данных. Значения переменных могут иметь значения по умолчанию. Если они добавлены без нормального назначения, виртуальная машина Java не может быть собрана правильно. Следовательно, использование основных типов данных Java обычно не вызывает исключения из нулевого указателя. В фактическом развитии большинство исключений из нулевого указателя в основном связаны с операциями объектов.
2. Механизм обработки исключений Java
Есть два способа справиться с кодом, которые могут иметь исключения:
Во -первых, используйте оператор Try ... Catch в методе, чтобы поймать и обрабатывать исключения. Оператор кэша может иметь несколько из них, чтобы соответствовать нескольким исключениям. Например:
public void p (int x) {try {...} catch (Exception e) {...} наконец {...}} Во -вторых, за исключением, которые не могут быть обработаны, или те, которые необходимо преобразовать, пропустите его при объявлении метода.
Оператор бросков бросает исключение. Например:
public void test1 () бросает myexception {... if (....) {throw new myexception ();}}Если каждый метод просто бросает исключение, в многослойном вложенном вызове метода метода вызова, виртуальная машина Java ищет обратно из блока кода метода, где исключение происходит до тех пор, пока не будет обнаружен кодовый блок, который обрабатывает исключение. Затем вручите исключение из соответствующего оператора Catch для обработки. Если виртуальная машина Java отслеживает обратно к методу Main () в нижней части стека вызовов метода, если блок кода, который обрабатывает исключение, все еще не найдено, будут выполнены следующие шаги:
Во -первых, вызовите метод printStackTrace () объекта исключения и распечатайте информацию об исключении стека вызовов метода.
Во -вторых, если поток, который возникает исключение, является основным потоком, вся запуск программы завершается; Если это не основной поток, поток прекращается, а другие потоки продолжают работать.
Благодаря анализу и мышлению мы видим, что чем раньше ненормальная обработка, тем меньше ресурсы и потребляемые время, тем меньше масштаб воздействия. Поэтому не бросайте исключения, с которыми вы можете справиться с вызывающим абонентом.
Другой момент нельзя игнорировать: наконец -то операторы должны выполнять код в любом случае, что может обеспечить надежность некоторого кода, который должен быть выполнен в любом случае. Например, когда запрос базы данных является ненормальным, соединение JDBC должно быть опубликовано и т. Д. Оператор, наконец, выполняется до оператора возврата, независимо от его порядка или местоположения, или есть исключение в блоке TRY. Единственная ситуация, когда оператор, окончательный, не выполняется, заключается в том, что метод выполняет метод System.Exit (). System.exit () Функции для прекращения в настоящее время работающей виртуальной машины Java. Возвращаемое значение возврата не может быть изменено, назначив новое значение переменной в блоке операторов наконец. Также рекомендуется не использовать оператор возврата в блоке, наконец,. Это бессмысленно и может легко привести к ошибкам.
Наконец, вы также должны обратить внимание на правила синтаксиса для обработки исключений:
Во -первых, заявления попробовать не могут существовать в одиночку, но могут быть составлены из улова и, наконец,
Попробуйте ... поймать ... Наконец, попробуйте ... поймать, попробуйте ... Наконец, попробуйте ... Наконец, заявления о пойре могут иметь один или несколько, и, наконец, операторы могут быть не более одного. Три ключевых слова пытаются, поймать и, наконец, не могут быть использованы в одиночку.
Во -вторых, объем переменных в трех кодовых блоках является независимым и не может быть доступен друг от друга. Если вы хотите быть доступным во всех трех блоках, вам необходимо определить переменную за пределами этих блоков.
В -третьих, когда используется несколько блоков улова, виртуальная машина Java соответствует одному из классов исключений или его подкласса и выполняет блок улова без выполнения других блоков улова.
В -четвертых, нет других утверждений, которые следуют после заявления о броске, потому что они не имеют возможности быть выполненным.
В -пятых, если один метод вызывает другой метод, который объявляет исключение, то этот метод либо обрабатывает исключение, либо объявляет брошен.
2.2 Дифференциация между бросками и бросками ключевых слов:
Бросок используется, чтобы бросить исключение внутри тела метода. Формат синтаксиса: бросить объект исключения.
Выбросы используются, чтобы объявить, какое исключение может быть брошено методом. После имени метода формат синтаксиса:
Выбрасывает исключение тип 1, тип исключения 2 ... Тип исключения n.
Три: в следующих перечислены несколько ситуаций и соответствующих решений, где могут произойти исключения из нулевого указателя:
Код фрагмент 1:
out.println (request.getParameter ("имя пользователя"));Анализ: Функция сегмента 1 кода очень проста, которая заключается в выводе значения пользовательского ввода «Имя пользователя».
Примечание. Похоже, что приведенное выше утверждение не может найти никаких синтаксических ошибок, и в большинстве случаев проблемы нет. Однако, если пользователь не предоставляет значение поля формы «Имя пользователя» при вводе данных или обходит форму, непосредственно вводясь непосредственно, значение этого запроса. GetParameter («Имя пользователя») пусто (обратите внимание, что это не пустая строка, это пустой объект NULL.), Метод PrintL "Java.lang.nullpointerException" Исключение. Более того, даже если объект может быть пустым, называются некоторые методы java.lang.object или объекта объекта, такие как ToString (), равные (объект obj) и другие операции.
Код фрагмент 2:
String username = request.getParameter ("имя пользователя"); If (username.equals ("root")) {...}Анализ: Функция сегмента 2 кода состоит в том, чтобы обнаружить имя пользователя, предоставленное пользователем. Если это пользователь, чье имя пользователя является «root», будут выполнены специальные операции.
Примечание. В сегменте кода 2, если пользователь не предоставляет значение поля формы «Имя пользователя», имя пользователя объекта String является нулевым значением, а один нулевой объект не может быть напрямую сравнить с другим объектом. Аналогичным образом, страница JSP, на которой находится сегмент 2 кода, приведет к пустой ошибке указателя.
Небольшой трюк: если вы хотите сравнить возвращаемое значение определенного метода с постоянной и положить константу перед ним, вы можете избежать вызова метода равных нулевого объекта. например:
If ("root" .equals (username)) {...}Даже если объект имени пользователя возвращает нулевый объект, здесь не будет нулевых исключений указателя и может работать как обычно.
Фрагмент 3:
String username = session.getattribute ("session.username"). ToString ();Анализ: Функция сегмента 3 кода состоит в том, чтобы извлечь значение Session.username в сеансе и назначить значение имени пользователя объекта String.
Примечание: в целом, если у пользователя уже был сеанс, никаких проблем не возникнет; Однако, если сервер приложений перезагружается в это время, и пользователь больше не вошел в систему (возможно, что пользователь закрывает браузер, но все же открывает исходную страницу.) Затем значение сеанса будет недействительным в настоящее время, что приведет к тому, что значение Session.username в сеансе будет пустым. Прямое выполнение операции ToString () на объекте с NULL приведет к тому, что система бросит исключение NULL Pointer.
Фрагмент 4:
public static void main (String args []) {person p = null; p.setname ("Zhang San"); System.out.println (p.getName ()); }Анализ: объявите объект человека и распечатайте имя имени в объекте.
Примечание. В настоящее время у вашего P будет исключение NULL Pointer, потому что вы просто заявили, что этот объект типа человека не создает объект, поэтому в его куче нет ссылки на адрес. Не обязательно создайте объект при использовании объекта и использования метода.
A: Начните использовать его непосредственно независимо от того, пуст объект или нет.
(JSP) Сегмент кода 1:
out.println (request.getParameter ("имя пользователя"));Анализ: Функция сегмента 1 кода очень проста, которая заключается в выводе значения пользовательского ввода «Имя пользователя».
Примечание. Похоже, что приведенное выше утверждение не может найти никаких синтаксических ошибок, и в большинстве случаев проблемы нет. Однако, если пользователь не предоставляет значение поля формы «Имя пользователя» при вводе данных или обходит форму, непосредственно вводясь непосредственно, значение этого запроса. GetParameter («Имя пользователя») пусто (обратите внимание, что это не пустая строка, это пустой объект NULL.), Метод PrintL "Java.lang.nullpointerException" Исключение. Более того, даже если объект может быть пустым, называются некоторые методы java.lang.object или объекта объекта, такие как ToString (), равные (объект obj) и другие операции.
(JSP) фрагмент 2:
String username = request.getParameter ("имя пользователя"); If (username.equals ("root")) {...}Анализ: Функция сегмента 2 кода состоит в том, чтобы обнаружить имя пользователя, предоставленное пользователем. Если это пользователь, чье имя пользователя является «root», будут выполнены специальные операции.
Примечание. В сегменте кода 2, если пользователь не предоставляет значение поля формы «Имя пользователя», имя пользователя объекта String является нулевым значением, а один нулевой объект не может быть напрямую сравнить с другим объектом. Аналогичным образом, страница JSP, на которой находится сегмент 2 кода 2, выбросит (java.lang.nullpointerexception) ошибка нулевого указателя.
(JSP) фрагмент 3:
String username = session.getattribute ("session.username"). ToString ();Анализ: Функция сегмента 3 кода состоит в том, чтобы извлечь значение Session.username в сеансе и назначить значение имени пользователя объекта String.
Примечание: в целом, если у пользователя уже был сеанс, никаких проблем не возникнет; Однако, если сервер приложений перезагружается в это время, и пользователь больше не вошел в систему (возможно, что пользователь закрывает браузер, но все же открывает исходную страницу.) Затем значение сеанса будет недействительным в настоящее время, что приведет к тому, что значение Session.username в сеансе будет пустым. Прямое выполнение операции ToString () на объекте, который является нулевым, приведет к тому, что система бросает (java.lang.nullPointerException) Исключение нулевого указателя.
Выше приведено полное содержание краткого обсуждения об обращении с исключениями из Java из -за исключений нулевого указателя, представленных вам редактором. Я надеюсь, что все будут поддерживать wulin.com больше ~