Почему NumberFormatException является средой выполнения? - PullRequest
22 голосов
/ 26 августа 2011

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

Исключения во время выполнения никогда не должны перехватываться.

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

При всем этом я не могу понять, почему NumberFormatException это время выполнения?

Ответы [ 5 ]

10 голосов
/ 26 августа 2011

Во-первых, кто бы вам ни сказал

Исключения во время выполнения никогда не должны быть перехвачены

не знает много о Java. Не слушайте их - они не правы.

NumberFormatException, являющееся исключением во время выполнения: непроверенные исключения выбраны потому, что они указывают на ошибку программирования . Можно * узнать до вызова Integer.parseInt() (например), что String является действительным целым числом, например вот только один способ:

if (str.matches("^\\d{1,8}$") {
    int myInt = Integer.parseInt(str); // will never throw NumberFormatException 
}

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

Если вы не уверены в целостности / качестве строки, которую собираетесь анализировать, ее легко поймать:

try {
    // parse your string
} catch (NumberFormatException e) {
    // do something about it
}

Другая причина сделать его исполняющим - это то, что он не загромождает код потенциально ненужными блоками try/catch, если вы уверены, что его не получите, например. если полностью доверять источнику данных String.

3 голосов
/ 26 августа 2011

NumberFormatException также может быть выдано при разборе файлов конфигурации, в этом случае это будет ошибка программиста.При анализе пользовательского ввода вы обычно используете NumberFormat, который выбрасывает проверенный ParseException.

2 голосов
/ 26 августа 2011

NumberFormatException расширяет IllegalArgumentException.Причина, по которой это исключение во время выполнения, заключается в том, что полностью возможно разорвать контракт метода, который принимает String и возвращает Number.Если я передам 123D и данные не будут проверены надлежащим образом, это будет недопустимым аргументом.

0 голосов
/ 15 ноября 2015

В некотором смысле NumberFormatException является исключением во время компиляции. Но вместо того, чтобы генерироваться компилятором Java, он генерируется анализатором / компилятором строки формата, когда ваша программа запускает его. То же самое относится к Pattern и другим видам использования регулярных выражений; ваша программа работает с анализатором / компилятором.

0 голосов
/ 26 августа 2011

Почему NumberFormatException является ошибкой во время выполнения?Хорошо, если у вас есть диалоговое окно, в котором пользователь вводит значение, а значение не является числом, а анализируется как таковое, то вам следует узнать об этом.Является ли исключение лучшим способом?Возможно, нет, но это то, что есть.

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