Следующий код дает ошибку unreachable statement
компилятора
public static void main(String[] args) {
return;
System.out.println("unreachable");
}
Иногда для целей тестирования требуется предотвратить вызов метода, поэтому быстрый способ сделать это (вместо того, чтобы комментировать его везде, где он использовался), должен немедленно вернуться из метода, чтобы метод ничего не делал. То, что я тогда всегда делаю, чтобы получить ошибку компилятора, - это
public static void main(String[] args) {
if (true) {
return;
}
System.out.println("unreachable");
}
Мне просто интересно, почему это ошибка компилятора? Будет ли это нарушать Java-байт-код каким-то образом, защищать программиста или это что-то еще?
Также (и это для меня более интересно), если компиляция java в байт-код делает какую-либо оптимизацию (или даже если это не так), то почему он не обнаружит вопиющего недостижимого кода во втором примере? Что было бы псевдокодом компилятора для проверки того, что оператор недостижим?