Что такое NullPointerException исключение в Java ?
Что бы ответить на этот вопрос нам необходимо понять, чем отличаются переменные примитивных и ссылочных типов. Переменная примитивного типа (int, double, boolean, char и пр.) являет собой область памяти непосредственно хранящую значение переменной, в отличии от переменных ссылочного типа, представляющие собой область памяти хранящие ссылку( адрес данных в памяти ) на значение переменной, чаще всего экземпляр объекта. Таким образом оперируя переменными примитивных типов, мы производим действия непосредственно с данными (обновляем, копируем, удаляем), в то время как операции с переменными ссылочного типа накладывают на нас некоторые ограничения: мы не можем непосредственно удалить или копировать данные, так как в этих случаях будет удаляться или копироваться лишь ссылка на ячейку памяти, содержащую данные.
ПеременнаяПримитивногоТипа = Данные
СсылочнаяПеремнная ссылка_на_область_памяти Данные
УДАЛЕНИЕ ПЕРЕМЕННЫХ
ПеременнаяПримитивногоТипа = Данные
СсылочнаяПеремнная ссылка_на_область_памяти Данные
Итак, разобравшись с тем, что собой представляют переменные ссылочного типа, можно представить себе ситуацию, при которой такая переменная будет ссылаться на область памяти в которой отсутствуют данные. Например используя оператор " . " пытаетесь вызвать метод у несуществующего объекта, или получить доступ к полю(переменной объекта). Или, используя " [ ] " получить доступ к значениям внутри несуществующего массива.
1. String s = null;
System.out.println(s.equals("Hello"));
2. String[] sArray = null;
sArray[0];
3. public static void npeExample(Object someObject) {
someObject.doSomething();
someObject.SOME_FILED;
}
npeExample(null);
4. public Object returnSomeObject() {
Object obj;
// Некая логика, при которой значение obj не изменяется,
// т.е. остается равным NULL
return obj;
}
returnSomeObject().toString();
// Все это приведет к NullPointerException
В примере номер четыре показана, пожалуй, самая распространенная ситуация, когда, вызванный метод, возвращает null, в то время, как логика программы предусматривает использование объекта, который должен вернуться из данного метода.
NullPointerException (NPE) является очень распространенной ошибкой, избежать которой можно, контролируя ситуации, в которых может происходит ссылка на несуществующие данные.