Почему NullPointerException не объявлено как проверенное исключение - PullRequest
22 голосов
/ 21 апреля 2010

Это был вопрос, заданный в интервью. NullPointerException очень распространено; почему это не объявлено как проверенное исключение? Я гуглил, но не получил правильного ответа.

Ответы [ 9 ]

34 голосов
/ 21 апреля 2010

Почти каждый метод должен был бы объявить его выбрасывание.

public void myMethod(String param) throws NullPointerException {
   //
}

(Например, Eclipse выдает предупреждение всякий раз, когда существует «потенциальный доступ с нулевым указателем», чтобы вы могли предотвратить исключение как можно раньше.)

15 голосов
/ 21 апреля 2010

Это не проверенное исключение (среди прочего) , потому что это очень распространенное явление. Это может происходить практически везде. Если бы это было проверено, то почти каждый метод в каждой Java-программе в любом месте должен был бы объявить, что он throws NullPointerException.

12 голосов
/ 21 апреля 2010

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

3 голосов
/ 21 апреля 2010

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

A NullPointerException (обычно) происходит, потому что в вашем коде есть какая-то ошибка. Если вы ожидаете, что будет выдано исключение NullPointerException, правильным решением будет исправить ошибку, а не обработать исключение.

3 голосов
/ 21 апреля 2010

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

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

2 голосов
/ 21 апреля 2010

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

NullPointerException s не указывает на «известную нежелательную» ситуацию.Вместо этого они обычно выбрасываются из-за некоторых неупорядоченных ситуаций в коде.То есть большую часть времени они происходят из-за неправильных методов кодирования - таких как попытка получить размер списка, который не инициализирован должным образом и т. Д. Поэтому нет смысла делать их проверенными исключениями - поскольку каждый объект в Java может быть нулевымв какой-то момент?!.NullPoitnerException`s никогда не должен быть пойман.

1 голос
/ 10 октября 2011

Проверенные исключения предназначены только для исключений, когда программа может восстановиться. Вызов чего-либо для объекта NULL является проблемой для программистов и не может быть восстановлен.

0 голосов
/ 06 января 2015

ЕСЛИ возникнет исключение нулевого указателя, ваша программа остановится.

0 голосов
/ 23 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...