Java cho phép các từ khóa nhất định được theo sau bởi một câu lệnh hoặc một khối câu lệnh. Ví dụ:Tại sao thử/bắt hoặc đồng bộ trong Java yêu cầu một khối lệnh?
if (true)
System.out.println("true");
do
System.out.println("true");
while (true);
biên dịch cũng như như
if(true) {
System.out.println("true");
}
do {
System.out.println("true");
} while (true);
này cũng đúng đối với các từ khóa như for
, while
, vv
Tuy nhiên, một số từ khóa không cho phép điều này. synchronized
yêu cầu một câu lệnh chặn. Tương tự cho try ... catch ... finally
, yêu cầu ít nhất hai câu lệnh chặn theo từ khóa. Ví dụ:
try {
System.out.println("try");
} finally {
System.out.println("finally");
}
synchronized(this) {
System.out.println("synchronized");
}
công trình, nhưng sau đây không biên dịch:
try
System.out.println("try");
finally
System.out.println("finally");
synchronized (this)
System.out.println("synchronized");
Vậy tại sao một số từ khóa trong Java đòi hỏi một tuyên bố khối, trong khi số khác cho phép một tuyên bố khối cũng như một đĩa đơn tuyên bố? Đây có phải là sự không nhất quán trong thiết kế ngôn ngữ hay không, hoặc có lý do nào đó cho điều này?
tôi nghi ngờ cách tiếp cận câu lệnh đơn được cau mày và chỉ được sử dụng vì có thể có điều tương tự trong c. vì c không được đồng bộ hóa hoặc cố gắng chúng có thể đi kèm với tùy chọn "an toàn hơn". –
Vì đó là cú pháp; AFAIK không có lý do kỹ thuật phải có một khối, vì nó có thể được tạo tự động. –
Đây là dự đoán của tôi, FWIW: Các nhà thiết kế ngôn ngữ muốn giữ một cú pháp đủ tương tự với các ngôn ngữ khác để hỗ trợ việc học. Nhưng cảm thấy nơi các tính năng ngôn ngữ mới được thêm vào, họ sẽ thực thi những gì một số cảm thấy là một tiêu chuẩn mã hóa tốt hơn. Hoặc, có lẽ, đối với các tính năng ngôn ngữ ít được sử dụng thường xuyên hơn, họ đã cho ý tưởng của họ về mã hóa tốt hơn? – Marvo