Подтвердить что ты не робот

Почему NullPointerException не объявляется как проверенное исключение

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

Ответ 9

Если исключение Null-указателя происходит, ваша приостановка будет остановлена. Это исключение из uchecked.