powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как компилятор определяет недостижимый код?
12 сообщений из 12, страница 1 из 1
Как компилятор определяет недостижимый код?
    #38557295
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В некоторых случаях компилятор может определить, что код недостижим, а в некоторых - нет.
вопрос такой: когда он может это понять, а когда нет?
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38557311
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь
http://ru.wikipedia.org/wiki/Недостижимый_код
можно найти полезную ссылку
http://ru.wikipedia.org/wiki/CFG
которая, вроде, доходчиво объясняет.

На сколько я понимаю Java компилятор во время компиляции строит такой граф и по нему определяет недостижимый код.
Компилятор не может определить недостежимый код, если его "недостижимость" обусловлена какими-то факторами внешними к компилируемому методу класса. Определение такого подобного кода уже более трудоёмкая задача и напрямую с процессом компиляуци не связана.
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38557324
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Особо интересующие могут почитать исходный код com\sun\tools\javac\comp\Flow.java
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38557359
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

я точно знаю, что если например
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if(...){
   ...
  return ;
}
else{
  ....
  return;
}

int a=1;//недостижим 



Код: java
1.
2.
return;
int a=1;//недостижим 



Код: java
1.
2.
catch(Exception e){...}
catch(IOException e{...}//этот блок catch недостижим



какие-ниюудь простые случае подскажете ещё ?
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38557365
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90какие-ниюудь простые случае подскажете ещё ?
Код: java
1.
2.
throw new RuntimeException();
System.out.println("unreachable");
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38557369
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

наверное throw в этом контексте аналогично return
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38558163
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz
На сколько я понимаю Java компилятор во время компиляции строит такой граф и по нему определяет недостижимый код.
Компилятор не может определить недостежимый код, если его "недостижимость" обусловлена какими-то факторами внешними к компилируемому методу класса. Определение такого подобного кода уже более трудоёмкая задача и напрямую с процессом компиляуци не связана.
Код: java
1.
2.
3.
4.
5.
6.
7.
                label1:
		for(int i =0;i<10;i++){
			for(int j=0;j<20;j++){
				continue label1;
			}
			System.out.println("unreachable code");
		}


К слову недостижимость в данном случае не обусловлена какими-то внешними факторами, но компилятор ее не определяет.
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38558172
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90,

Верно. Циклы компилятор вычислить не может, пока не развернет. Но с тем же успехом можно и while(true) замкнуть.
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38558180
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

ещё и
Код: java
1.
2.
if(true){}
System.out.println("*");//тут нет недостижимого кода
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38558186
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90Blazkowicz,

ещё и
Код: java
1.
2.
if(true){}
System.out.println("*");//тут нет недостижимого кода


ОК. Я ошибся. Внешние факторы тут не причем. Валидация происходит исключительно по графу.
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38558360
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowiczredwhite90Blazkowicz,

ещё и
Код: java
1.
2.
if(true){}
System.out.println("*");//тут нет недостижимого кода


ОК. Я ошибся. Внешние факторы тут не причем. Валидация происходит исключительно по графу.

да и я ошибся, но мы видимо друг друга поняли
Код: java
1.
2.
if(true){return;}
System.out.println("*");//тут нет недостижимого кода
...
Рейтинг: 0 / 0
Как компилятор определяет недостижимый код?
    #38558903
maxkar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90вопрос такой: когда он может это понять, а когда нет?
Все строго спецификации. JSL Chap. 14.21 Unreacheable Statements
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как компилятор определяет недостижимый код?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]