2012-01-10 38 views
5

Phương thức bên dưới không thể thực hiện được bằng Java vì biến số i có thể vẫn chưa được khởi tạo trước khi sử dụng. Đây có phải là vấn đề cú pháp hoặc ngữ nghĩa không?Vấn đề cú pháp hoặc ngữ nghĩa?

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

Tôi đã nghĩ đó sẽ là ngữ nghĩa, nhưng theo người hướng dẫn của tôi, đó là lỗi cú pháp. Điều đó có đúng không và tại sao?

+0

Vâng, tại sao nó quan trọng? Cả hai sẽ không giúp bạn làm việc mã. – Piskvor

+1

Nó phải làm với tối ưu hóa trình biên dịch, trình biên dịch tìm thấy mã không thể truy cập có thể như –

Trả lời

8

Đó là lỗi do trình biên dịch Java phát hiện, nhưng đó là lỗi không; nó hoàn toàn hợp lệ theo ngữ pháp Java. Nó được phát hiện trong các giai đoạn phân tích sau, khiến nó trở thành một lỗi ngữ nghĩa.

Điều đó nói rằng, có vẻ như người hướng dẫn của bạn muốn xác định bất kỳ lỗi trình biên dịch nào là lỗi cú pháp và có thể muốn "lỗi ngữ nghĩa" có nghĩa là xảy ra lỗi khi chạy. Vì người hướng dẫn chấm bài tập về nhà, bạn buộc phải chấp nhận các định nghĩa của mình (ngay cả khi chúng hoàn toàn sai, như trong trường hợp này;)).

+0

Cảm ơn rất nhiều cho câu trả lời của bạn! – Adeeb

0

Java có cú pháp được xác định nghiêm ngặt để khai báo biến cục bộ và trong mẫu mã của bạn, bạn không theo dõi nó.

vì vậy trong java, nó sẽ trở thành lỗi cú pháp.

tham khảo này: http://c2.com/cgi/wiki?SyntaxVsSemantics

và điều này: http://wiki.answers.com/Q/What_are_the_Differences_between_syntax_and_semantic_error

+0

Phần nào của cú pháp Java bị vi phạm? –

+1

Đó phải là trang * tồi tệ nhất trên c2 mà tôi từng xem. Điều gì sai ngữ pháp! –

+0

@DaveNewton: biến cục bộ không được xác định chính xác. – Azodious

Các vấn đề liên quan