2012-01-10 4 views
5

Метод ниже не может быть выполнен на Java, потому что переменная i может оставаться неинициализированной к моменту ее использования. Это проблема синтаксиса или семантики?Проблема синтаксиса или семантики?

public int odd(boolean b){ 
    int i; 
    if(b){ i = 3;} 
    return i; 
} 

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

+0

Ну, почему это важно? Также вы не получите рабочий код. – Piskvor

+1

Это связано с оптимизацией компилятора, а вот компилятор находит возможный недостижимый код, например –

ответ

8

Это ошибка, обнаруженная компилятором Java, но это не ошибка синтаксиса; он отлично действует в соответствии с грамматикой Java. Он обнаружен на более поздних этапах анализа, что делает его семантической ошибкой.

Это говорит о том, что ваш инструктор хочет определить любую ошибку компилятора как синтаксическую ошибку и, вероятно, хочет, чтобы «семантическая ошибка» означала что-то, что не соответствует во время выполнения. Поскольку инструктор оценивает домашнюю работу, вы вынуждены принимать его определения (даже если они совершенно неправы, как в этом случае;)).

+0

Большое спасибо за ваш ответ! – Adeeb

0

Java имеет строго определенный синтаксис для объявления локальных переменных, а в вашем примере кода вы не выполняете его.

поэтому в java, он становится синтаксической ошибкой.

см это: http://c2.com/cgi/wiki?SyntaxVsSemantics

и это: http://wiki.answers.com/Q/What_are_the_Differences_between_syntax_and_semantic_error

+0

Какая часть синтаксиса Java нарушена? –

+1

Это должно быть * наихудшая страница на c2, на которую я когда-либо смотрел. Какая тарабарщина! –

+0

@DaveNewton: локальная переменная не определена правильно. – Azodious

Смежные вопросы