Java는 특정 키워드 뒤에 명령문이나 명령문 블록이 오도록 허용합니다. 예를 들어 :Java에서 try/catch 또는 synchronized가 명령문 블록을 필요로하는 이유는 무엇입니까?
if (true)
System.out.println("true");
do
System.out.println("true");
while (true);
이 그러나, 일부 키워드는 이것을 허용하지 않는 for
, while
등
또한 같은 키워드에 대한 사실뿐만 아니라
if(true) {
System.out.println("true");
}
do {
System.out.println("true");
} while (true);
로 컴파일합니다. synchronized
에는 block 문이 필요합니다. try ... catch ... finally
과 동일합니다. 키워드 뒤에 적어도 두 개의 block 문이 필요합니다. 예를 들어 :
try {
System.out.println("try");
} finally {
System.out.println("finally");
}
synchronized(this) {
System.out.println("synchronized");
}
작동하지만 다음과 같은 컴파일되지 않습니다 : 다른 사람이 하나뿐만 아니라 블록 문을 허용하면서 자바에서 몇 가지 키워드, 블록 문을 필요로 왜 이렇게
try
System.out.println("try");
finally
System.out.println("finally");
synchronized (this)
System.out.println("synchronized");
을 성명서? 언어 디자인에있어 모순이 있습니까? 아니면 이에 대한 이유가 있습니까?
단일 문장 접근법이 frowned되고 c에서 비슷한 점이 있기 때문에 사용 된 것 같습니다. c는 동기화되지 않았거나 시도하지 않았기 때문에 아마도 "안전한"옵션을 사용했을 것입니다. –
이것이 구문입니다. AFAIK는 자동으로 생성 될 수 있기 때문에 블록이 있어야한다는 기술적 인 이유가 없습니다. –
내 추측은 FWIW입니다. 언어 디자이너는 학습을 돕기 위해 다른 언어와 비슷한 구문을 유지하기를 원했습니다. 그러나 새로운 언어 기능이 추가 된 곳에서 느껴지는 것은 더 나은 코딩 표준이라는 느낌을 강요 할 것입니다. 또는 덜 자주 사용되는 언어 기능의 경우 더 나은 코딩에 대한 아이디어를 얻었습니까? – Marvo