Другое событие NullPointerException возникает при объявлении массива объектов, а затем сразу же пытается разглядеть элементы внутри него.
String[] phrases = new String[10]; String keyPhrase = «Bird»; for(String phrase : phrases)
Этот конкретный NPE можно избежать, если порядок сравнения будет отменен ; а именно, использовать .equals для гарантированного непустого объекта.
Все элементы внутри массива инициализируются общим общим значением; для любого типа массива объектов это означает, что все элементы null.
Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.
String[] phrases = new String[] ; String keyPhrase = «Bird»; for(String phrase : phrases)
ответ дан 2 revs, 2 users 97% 15 August 2018 в 15:44
Указатель NULL — это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.
2 способа избавиться от ошибки java.lang.nullpointerexception: null
В общем, это потому, что что-то не было правильно инициализировано.
ответ дан 4 revs, 4 users 57% 15 August 2018 в 15:44
В Java все переменные, которые вы объявляете, на самом деле являются «ссылками» на объекты (или примитивы), а не самими объектами.
Когда вы пытаетесь выполнить один объектный метод, ссылка запрашивает живой объект для выполнения этого метода. Но если ссылка ссылается на NULL (ничего, нуль, void, nada), то нет способа, которым метод будет выполнен. После этого runtime сообщит вам об этом, выбросив исключение NullPointerException.
Ваша ссылка «указывает» на нуль, таким образом, «Null -> Pointer».
Объект живет в памяти виртуальной машины пространство и единственный способ доступа к нему — использовать ссылки this. Возьмем этот пример:
public class Some < private int id; public int getId()< return this.id; >public setId( int newId ) < this.id = newId; >>
И в другом месте вашего кода:
Some reference = new Some(); // Point to a new object of type Some() Some otherReference = null; // Initiallly this points to NULL reference.setId( 1 ); // Execute setId method, now private var id is 1 System.out.println( reference.getId() ); // Prints 1 to the console otherReference = reference // Now they both point to the only object. reference = null; // «reference» now point to null. // But «otherReference» still point to the «real» object so this print 1 too. System.out.println( otherReference.getId() ); // Guess what will happen System.out.println( reference.getId() ); // :S Throws NullPointerException because «reference» is pointing to NULL remember.
Это важно знать — когда больше нет ссылок на объект (в пример выше, когда reference и otherReference оба указывают на null), тогда объект «недоступен». Мы не можем работать с ним, поэтому этот объект готов к сбору мусора, и в какой-то момент виртуальная машина освободит память, используемую этим объектом, и выделит другую.
ответ дан 4 revs, 4 users 79% 15 August 2018 в 15:44
Исключено исключение нулевого указателя, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:
Вызов метода экземпляра объекта null. Доступ или изменение поля объекта null. Принимая длину null, как если бы это был массив. Доступ или изменение слотов null, как если бы это был массив. Бросание null, как если бы это было Throwable значение.
Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.
ответ дан 5 revs, 4 users 55% 15 August 2018 в 15:44
Исключение с нулевым указателем — это индикатор того, что вы используете объект, не инициализируя его.
Например, ниже — класс ученика, который будет использовать его в нашем коде.
public class Student < private int id; public int getId() < return this.id; >public setId(int newId) < this.id = newId; >>
Ниже приведен код исключения null.
public class School < Student obj_Student; public School() < try < obj_Student.getId(); >catch(Exception e) < System.out.println(«Null Pointer «); >> >
Поскольку вы используете Obj_Student, но вы забыли инициализировать его, как в правильном коде, показанном ниже:
public class School < Student obj_Student; public School() < try < obj_Student = new Student(); obj_Student.setId(12); obj_Student.getId(); >catch(Exception e) < System.out.println(«Null Pointer «); >> >
ответ дан 5 revs, 4 users 61% 15 August 2018 в 15:44
Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException вообще.
См. также: Хороший список лучшие практики
Я бы добавил, очень важно, хорошо использовать модификатор final. Хороший список лучших практик
best practices
ответ дан 5 revs, 4 users 68% 15 August 2018 в 15:44
Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инстанцировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.
См. Также этот пример:
String a = null; System.out.println(a.toString()); // NullPointerException will be thrown
ответ дан 5 revs, 5 users 38% 15 August 2018 в 15:44
В Java все находится в форме класса.
Если вы хотите использовать любой объект, то у вас есть две фазы:
Объявление: Object a; Инициализация: a=new Object();
То же самое для концепции массива
Объявление: Object a; Инициализация: i[0]=new Item();
Если вы не даете секцию инициализации, возникает NullpointerException.
ответ дан 5 revs, 5 users 58% 15 August 2018 в 15:44
Что такое исключение NullPointerException?
Хорошим местом для начала является JavaDocs. Они охватывают:
Брошено, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся: Вызов метода экземпляра нулевого объекта. Доступ или изменение поля нулевого объекта. Принимая длину null, как если бы это был массив. Доступ или изменение слотов с нулевым значением, как если бы это был массив.
Бросать нуль, как если бы это было значение Throwable. Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные действия нулевого объекта.
Также, если вы попытаетесь использовать нулевую ссылку с synchronized, это также вызовет это исключение, JavaDocs :
SynchronizedStatement: synchronized ( Expression ) Block
Вызов метода экземпляра нулевого объекта. Доступ или изменение поля нулевого объекта. Принимая длину null, как если бы это был массив. Доступ или изменение слотов с нулевым значением, как если бы это был массив.
Бросать нуль, как если бы это было значение Throwable.
Как это исправить?
Итак, у вас есть NullPointerException. Как вы это исправите? Возьмем простой пример, который выдает NullPointerException:
public class Printer < private String name; public void setName(String name) < this.name = name; >public void print() < printString(name); >private void printString(String s) < System.out.println(s + » (» + s.length() + «)»); >public static void main(String[] args) < Printer printer = new Printer(); printer.print(); >>
Идентифицирует нулевые значения
. Первый шаг — это точное определение того, какие значения вызывают исключение. Для этого нам нужно выполнить некоторую отладку. Важно научиться читать stacktrace. Это покажет вам, где было выбрано исключение:
Exception in thread «main» java.lang.NullPointerException at Printer.printString(Printer.java:13) at Printer.print(Printer.java:9) at Printer.main(Printer.java:19)
Здесь мы видим, что исключение выбрано в строке 13 (в методе printString). Посмотрите на строку и проверьте, какие значения равны нулю, добавив , какие значения вызывают исключение или используют отладчик. Мы обнаруживаем, что s имеет значение null, а вызов метода length на него вызывает исключение. Мы можем видеть, что программа прекращает бросать исключение, когда s.length() удаляется из метода.
Идентифицируйте нулевые значения
Затем проверьте, где это значение происходит от. Следуя вызовам метода, мы видим, что s передается с printString(name) в методе print(), а this.name имеет значение null.
Трассировка, где эти значения должны быть установлены [ ! d30]
Где this.name установлен? В методе setName(String). С некоторой дополнительной отладкой мы видим, что этот метод вообще не вызывается. Если этот метод был вызван, обязательно проверьте отладчик , что эти методы вызывают, а метод set не вызывается stacktrace методом печати.
Этого достаточно, чтобы дать нам решение: добавить вызов printer.setName() перед вызовом printer.print().
Другие исправления
Переменная может иметь значение по умолчанию (и setName может помешать ему установить значение null):
private String name = «»;
Либо метод print, либо printString может по умолчанию , например:
printString((name == null) ? «» : name);
Или вы можете создать класс таким образом, чтобы name всегда имел ненулевое значение:
public class Printer < private final String name; public Printer(String name) < this.name = Objects.requireNonNull(name); >public void print() < printString(name); >private void printString(String s) < System.out.println(s + » (» + s.length() + «)»); >public static void main(String[] args) < Printer printer = new Printer(«123»); printer.print(); >>
Трассировка, где эти значения должны быть установлены
В противном случае, если значение выражения равно NULL, выдается NullPointerException.
Я все еще не могу найти проблему
Если вы попытались отладить проблему и до сих пор не имеете решения, вы можете отправить вопрос для получения дополнительной справки, но убедитесь, что чтобы включить то, что вы пробовали до сих пор. Как минимум, включите stacktrace в вопрос и отметьте важные номера строк в коде. Также попробуйте сначала упростить код (см. SSCCE).
Источник: askubuntu.ru
Что такое NullPointerException в Java
NullPointerException — исключение RuntimeException. Исключения в Runtime являются критическими и не могут быть пойманы во время компиляции. Они приводят к сбою программы во время выполнения, если они не обрабатываются должным образом. Когда экземпляр класса создается, его объект хранится в памяти компьютера. Исключения NullPointerExceptions возникают, когда вы пытаетесь использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. К ним относятся:
NullPointerException — исключение RuntimeException. Исключения в Runtime являются критическими и не могут быть пойманы во время компиляции. Они приводят к сбою программы во время выполнения, если они не обрабатываются должным образом. Когда экземпляр класса создается, его объект хранится в памяти компьютера.
Исключения NullPointerExceptions возникают, когда вы пытаетесь использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. К ним относятся.
String str; str = new String(«Java»);
Первая строка объявляет переменную str, но она не содержит примитивного значения. Вместо этого он содержит указатель (потому что это тип String, который является ссылочным типом). Поскольку вы еще не сказали, что указать на Java, он устанавливает значение null. Это означает, что он ничего не указывает.
Во второй строке ключевое слово new используется для создания (или создания) объекта типа String, а переменной-указателю str присваивается этот объект. Теперь вы можете ссылаться на объект, используя оператор разыменования. (точка).
String str; str = new String(«Java»); System.out.println(«Length :»+str.length());
Вышеприведенный код должен найти длину строки. Когда вы запустите код, он выведет результат как 4.
NullPointerException возникает, когда вы объявляете переменную, но не создаете объект. Если вы попытаетесь разыграть str перед созданием объекта, вы получите исключение NullPointerException. Проверьте следующий код:
String str=null; System.out.println(«Length :»+str.length());
Как исправить исключение Java NullPointerException?
Вы можете избежать этого исключения NullPointerException путем кодирования следующим образом:
if(str != null) < //сделай что-нибудь >else < //сделай что-нибудь >
Примечание. Чтобы исправить это исключение NullPointerException, вы всегда должны инициализировать свои объекты, прежде чем пытаться что-либо сделать с ними.
Источник: programmera.ru
Null Pointer Exception Class
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
Thrown when an application attempts to use null in a case where an object is required.
[Android.Runtime.Register(«java/lang/NullPointerException», DoNotGenerateAcw=true)] public class NullPointerException : Java.Lang.RuntimeException
[] type NullPointerException = class inherit RuntimeException
Inheritance
NullPointerException
Attributes
Remarks
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Constructors
Constructs a NullPointerException with no detail message.
A constructor used when creating managed representations of JNI objects; called by the runtime.
Constructs a NullPointerException with the specified detail message.
Fields
is_generated | (Inherited from Throwable) |
Properties
Returns the cause of this throwable or null if the cause is nonexistent or unknown.
The handle to the underlying Android instance.
Creates a localized description of this throwable.
Returns the detail message string of this throwable.
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
Methods
Appends the specified exception to the exceptions that were suppressed in order to deliver this exception.
Fills in the execution stack trace.
Provides programmatic access to the stack trace information printed by #printStackTrace() .
Returns an array containing all of the exceptions that were suppressed, typically by the try -with-resources statement, in order to deliver this exception.
Initializes the cause of this throwable to the specified value.
Prints this throwable and its backtrace to the standard error stream.
Prints this throwable and its backtrace to the specified print stream.
Prints this throwable and its backtrace to the specified print writer.
Sets the Handle property.
Sets the stack trace elements that will be returned by #getStackTrace() and printed by #printStackTrace() and related methods.
Explicit Interface Implementations
IJavaPeerable.Disposed() | (Inherited from Throwable) |
IJavaPeerable.DisposeUnlessReferenced() | (Inherited from Throwable) |
IJavaPeerable.Finalized() | (Inherited from Throwable) |
IJavaPeerable.JniManagedPeerState | (Inherited from Throwable) |
IJavaPeerable.SetJniIdentityHashCode(Int32) | (Inherited from Throwable) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) | (Inherited from Throwable) |
IJavaPeerable.SetPeerReference(JniObjectReference) | (Inherited from Throwable) |
Extension Methods
Performs an Android runtime-checked type conversion.
Источник: learn.microsoft.com