NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
НА УДАЛЯЮТ КАСКАД, прекрасен, но только когда зависимые строки являются действительно логическим расширением удаляемой строки. Например, это хорошо для, УДАЛЯЮТ ЗАКАЗЫ удалить связанный ORDER_LINES, потому что ясно Вы хотите удалить этот порядок, который состоит из заголовка и некоторых строк. С другой стороны, УДАЛИТЕ КЛИЕНТА, не должен удалять связанные ЗАКАЗЫ, потому что ЗАКАЗЫ важны самостоятельно, они не просто атрибуты клиента.
Один способ думать об этом: если я выхожу, УДАЛЯЮТ X, и это также удаляет Y, я буду счастлив или недоволен? И если я выхожу, УДАЛЯЮТ X, и сказан, "не может удалить X, потому что Y существует", я буду радоваться защите, или раздражаемый в incovenience?
Я предпочитаю управлять точно, что удалено (путем явного объявления его), таким образом, я обычно решил удалить с помощью хранимых процедур, а не использовать расположение каскадом удаляет.