Это было вопросом, который задают в интервью. NullPointerException
очень распространено; почему это не объявляется как контролируемая исключительная ситуация? Я погуглил, но не получил надлежащий ответ.
Почти каждый метод должен объявить его бросание.
public void myMethod(String param) throws NullPointerException {
//
}
(В качестве примечания - Eclipse, например, выдает предупреждение всякий раз, когда есть «потенциальный доступ к нулевому указателю», чтобы вы могли предотвратить исключение как можно раньше.)
Исключения с нулевым указателем являются расширением исключений среды выполнения и, следовательно, являются неожиданными событиями в потоке вашей программы. Не имеет смысла ожидать, что будет выбрано исключение с нулевым указателем (я надеюсь!), И поэтому вы никогда не объявите его как проверенное исключение.
Проверенные исключения могут возникать из-за того, что что-то в среде , над которой ваша программа практически не контролирует или не имеет никакого контроля, пошло не так (например, IOException
, SQLException
). Вы можете предвидеть это и справиться с этим делом.
NullPointerException
(обычно) возникает из-за ошибки в вашем коде. Если ожидается выброс исключения NullPointerException, правильным решением будет исправить ошибку, а не обрабатывать исключение.
Это не проверенное исключение (помимо прочего) , потому что оно чрезвычайно распространено. Это может произойти практически везде. Если бы это было проверено, то почти каждый метод в каждой отдельной Java-программе где угодно должен был бы объявить, что он выдает исключение NullPointerException
.
Я хотел бы дать ответ одним предложением: это результат ошибки программирования, а исключения ошибок программирования не проверяются исключениями (IllegalStateException, ClassCastException и т. Д. .).
Но даже если бы у вас был аргумент в пользу того, почему это может быть проверенное исключение, в основном каждая операция со ссылкой на объект может вызывать его, так что это будет повсюду, и буквально каждый метод в нетривиальной программе будет нужно выбросить его - так в чем же смысл?
Мое собственное обязательное определение для проверяемого исключения. Проверенные исключения - это исключения, которые API вызовет в случае возникновения известной нежелательной ситуации
NullPointerException
не указывает на «известную нежелательную» ситуацию. Вместо этого они обычно выбрасываются из-за некоторых необработанных ситуаций в коде. То есть в большинстве случаев они возникают из-за неправильной практики кодирования - например, попытки получить размер списка, который не инициализирован должным образом и т. Д. Таким образом, нет смысла делать их проверяемыми исключениями - поскольку каждый объект в Java может быть нулевым. в какой-то момент?!. Исключения NullPoitnerException тоже не следует перехватывать.
Зачем включать его, если каждая функция, которую вы пишете, должна будет объявлять его? Просто чтобы упростить вашу жизнь.