Почему деление исключений во время компиляции на ноль не производит в Eclipse IDE?

1

Пожалуйста, проверьте коды ниже...

    // this will produce java.lang.ArithmeticException: / by zero
    System.out.println(1 / 0);
    // this will produce Infinity result
    System.out.println(1.1 / 0);

Я предполагаю, что арифметика Integer всегда будет вызывать java.lang.ArithmeticException:/нолем. Если это так, я предполагаю, что первый оператор или System.out.println(Integer.parseInt("1")/0); должен производить исключение во время компиляции. Но на моей Eclipse IDE не было никаких ошибок времени компиляции или предупреждений. Или, может быть, я ошибаюсь.
Какие-либо предложения?

Теги:
exception
divide-by-zero

1 ответ

3
Лучший ответ

Integer.parseInt("1") будет выполняться только во время выполнения. Компилятор не знает, будет ли операция анализа даже успешной.

В зависимости от компилятора 1/0 может быть оптимизирована во время компиляции, и компилятор может просто записать результат в скомпилированный код. Следовательно, это исключало бы исключение. Однако, если этот расчет не оптимизирован, компилятор не будет знать результат этой операции до ее выполнения.

Btw, мой компилятор Eclipse, похоже, не делает этого (я еще не проверял настройки) и компилирует 1/0 просто отлично.

ОБНОВИТЬ

Хотя 1/0 будет постоянным выражением, которое может быть оценено во время компиляции, компилятор может по-прежнему отказаться игнорировать и компилировать код.

Вот некоторые похожие вопросы с некоторой дополнительной информацией: Почему не константа Java, деленная на ноль, создает ошибку времени компиляции?

  • 0
    если так 1/0 тоже?
  • 0
    1/0 с использованием литералов гарантированно будет выполняться и, таким образом, обязательно вызовет исключение или даже может быть вычислен во время компиляции для оптимизации, тогда как первый раз анализ строки может завершиться неудачей даже до того, как будет выполнено деление на ноль.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню