Защо разделянето на изключенията по време на компилация с нула не се произвежда в Eclipse IDE?

Моля, проверете кодовете по-долу ...

    // 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. Или може би греша.
Някакви предложения?


person Cataclysm    schedule 13.03.2014    source източник
comment
Каква е връзката със C++? Компилаторът на GCC вероятно щеше да ви предупреди....   -  person Basile Starynkevitch    schedule 13.03.2014
comment
@Raxvan, съжалявам, че редактирах.   -  person Cataclysm    schedule 13.03.2014


Отговори (1)


Integer.parseInt("1") ще се изпълнява само по време на изпълнение. Компилаторът не знае дали операцията за разбор дори ще успее.

В зависимост от компилатора 1/0 може да се оптимизира по време на компилиране и компилаторът може просто да запише резултата в компилирания код. Следователно ще хвърли изключението точно там. Ако обаче това изчисление не е оптимизирано, компилаторът няма да знае резултата от тази операция, докато не бъде изпълнена.

Между другото, компилаторът ми на Eclipse изглежда не прави това (още не съм проверил настройките) и компилира 1/0 добре.

АКТУАЛИЗАЦИЯ

Въпреки че 1/0 ще бъде постоянен израз, който може да бъде оценен по време на компилиране, компилаторът все пак може да избере да игнорира това и да компилира кода.

Ето един подобен въпрос с малко повече информация: Защо Java константа, разделена на нула, не генерира грешка при компилиране?

person Thomas    schedule 13.03.2014
comment
1/0 използването на литерали е гарантирано, че ще се изпълнява и по този начин със сигурност ще причини изключение или дори може да бъде изчислено по време на компилация за оптимизации, докато първо анализирането на низ може да е неуспешно дори преди да бъде изпълнено делението на нула. - person Thomas; 13.03.2014
comment
Сигурен съм, че моята Eclipse IDE не показва никакви грешки или предупреждения за израз 1/0. Вярно ли е за java компилатора? - person Cataclysm; 13.03.2014
comment
@Cataclysm, както казах в моята редакция, зависи от компилатора и може да има причини да не хвърляте изключение по време на компилиране. - person Thomas; 13.03.2014
comment
глоба ! Сега съм доволен от вашия актуализиран отговор. Благодаря за добрия отговор и полезните връзки. - person Cataclysm; 13.03.2014