Компилятор Java предназначен для такой работы или это ограничение? - PullRequest
1 голос
/ 01 марта 2012

Скажем, у меня есть строки ниже в любом классе Java,

System.out.println("start");
if(true)//The compiler will give compile time error if I uncomment this. 
    throw new RuntimeException();
System.out.println("end");

Сообщение об ошибке недоступного кода появится, если закомментировано if(true). Почему компилятор не знает, что строка под if(true) всегда будет выполняться?

Разработан ли компилятор Java для такой работы или это ограничение?

Ответы [ 2 ]

6 голосов
/ 01 марта 2012

Это преднамеренная часть дизайна, связанная с достижимостью кода. См. раздел 14.21 JLS, в котором об этом есть раздел внизу.

Обоснование этого отличающегося подхода состоит в том, чтобы позволить программистам определять «переменные-флажки», такие как:

static final boolean DEBUG = false;

и затем напишите код, такой как:

if (DEBUG) { x=3; }

Идея заключается в том, что можно изменить значение DEBUG с false на true или с true на false, а затем правильно скомпилировать код без каких-либо других изменений в тексте программы.

1 голос
/ 01 марта 2012

Это ограничение того, как далеко вы идете, чтобы проверить, есть ли у вас мертвый код или код, который никогда не запустится.

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

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