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

Почему NumberFormatException - это время выполнения?

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

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

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

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

4b9b3361

Ответ 1

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

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

мало что знает о Java. Не слушайте их - они ошибаются.

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

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.

Ответ 2

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

Ответ 3

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

Ответ 4

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

Ответ 5

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