답변:
그것은 거의 쓸모가 없지만 필요한 곳이 몇 군데 있습니다. 예를 들면 다음과 같습니다.
while (DoSomething());
이 DoSomething()
메소드는 false를 리턴 할 때까지 메소드를 실행합니다 . 분명히 이것은 방법이 유용한 부작용을 수행한다고 가정합니다. 그러나 빈 명령문, 즉 후미 세미콜론이 필요합니다. 그렇지 않으면 while 루프에는 다음 다음 명령문이 대신 포함됩니다.
(그러나, 다른 답변을 모순 for(;;) {}
입니다 하지 A는 문을 포함하지 않는 절 위해, 그냥 (선택 사항) 표현식을 분리하는 세미콜론을 사용 후 괄호 때문에, 빈 문장의 예. 참조 자바 문법에 대한 자세한 내용입니다.)
명령문이 구문 적으로 필요하지만 의미 적으로 필요하지 않은 경우에 사용할 수 있습니다. 가장 일반적인 경우는 이 예제 와 같이 for 루프의 일부 중 하나를 생략하는 것입니다. 대부분의 사람들은 사용법이 이상하고 읽기가 어렵다는 것을 알고 있습니다. 책에서 말하는 것처럼 거의 사용되지 않습니다.
while ( sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { ; }
물론 모두 별도의 줄에 있습니다. 나는로 쓸 수 있었지만 그것은 while ( true ) { if ( ! sleepPoll(device, 1000, TimeUnit.MILLISECONDS) ) { break; } }
잘못되었을 것입니다.
void method(){ //code here. If(condition){return ;}}
.
while 루프 사용을 선호 하지만 null 식을 사용하면 다음과 같이 작성할 수 있습니다.
for (;;) { thread.run(); }
그러나 널 문장으로 작성해 보자.
while(true);
{
thread.run();
}
그 주요 목적은 당신을 뒤 따르고 왜 스레드가 작동하지 않는지 궁금한 유지 보수 프로그래머의 시간을 낭비하는 것입니다. 성명서는 반드시 한동안 따라야합니다. 고독한; 진술입니다. 따라서이 문장 블록은 실제로 루프의 일부가 아닙니다.
좋은 사용법이 없다고 말하는 것은 아닙니다. 그들은 아주 드 rare니다. 그들은 보통 다음과 같이 보입니다 :
{
;
}
이런 식으로 당신이 그것을 의미하는 것처럼 보이기 때문에 (때로는 충분하지 않음).
어셈블리에서이 널 명령문을 NOP 라고합니다 . 파이썬에서는 이것을 pass 라고 부릅니다 . 자바 (및 c의 다른 자식들)에서 그것은 당신이 말했듯이 세미콜론이거나 심지어 진실이라고 주장합니다.
몇 가지 용도를 알고 있습니다.
시맨틱 .
빈 공간과 대답으로 0을 내리는 것에는 차이가 있습니다. 분명히 여기에 무언가를 넣는 것을 잊지 않았습니다. 이것은 아무것도 아닙니다. 명백한 아무것도 아닙니다. 이 공간은 의도적으로 비워 두었습니다. 이것이 N / A를 컴파일하는 방법입니다.
널 패턴
컨베이어 벨트에서 컬러 전구를 반복해서 집어 들고 소켓에 끼 우고 전원을 켜고 제거한 다음 다음 것을 집어 올리는 복잡하고 고가의 광 신호 장치를 상상해보십시오. 벨트에 붙인 전구의 색상 으로이 신호를 제어 할 수 있습니다. 좋습니다. 이제 완벽하게 작동하므로 상사는 이러한 신호의 타이밍을 제어하는 방법을 만들고자합니다. 메시지 사이에 간격을 추가하려고합니다. 많은 부분이 이러한 신호의 타이밍과 신호를 동기화하는 것이 얼마나 고통 스러웠는지 공포로 기억합니다. 주말 내내 업무를 수행하지 않으면 서 타이밍을 어떻게 제어 할 수 있습니까? 불에 타 버린 전구를 살펴보고 말 그대로 밝지 않은 아이디어를 얻습니다.
때로는 다형성을 사용하여 아무것도 깨지 않고 무언가를 끄려고 할 때가 있습니다.
디버깅
중단 점을 설정할 때 중단 점이 있어야합니다. 이제 일부 디버거가 닫는 중괄호로 설정하도록 허용하지만 그렇지 않은 경우 언어로 인해 장소가 아무것도하지 않더라도 강제로 배치 할 수있는 것이 좋습니다.
실제로 Java는 아니지만 다음도 있습니다.
이진법
어셈블리 NOP 명령을 사용하면 컴파일 된 이진 실행 파일을 처리 할 수 있습니다. 그러나 현대 Java 컴파일러는 너무 멀리 최적화되어 있습니다. 세미콜론이 단순히 헛소리가 아니라고 확신하지 않습니다. 그러나 예전에는 실행 파일에서이 빈 지점을 사용하여 타이밍을 제어하거나 나중에 후크를 놓을 수있었습니다. NOP가 없으면 실제 지침이 있으므로 후크를 원하면 후크를위한 공간을 만들기 위해 해당 지침을 다른 곳에 복사해야합니다. 이것은 Java가 많은 구문을 얻는 c 언어에서도 잘 작동합니다. 그러나 나는이 훅 피들 링이 Java에서 많이 발생한다고 생각하지 않습니다. 우리는 Aspect Oriented Programming 을 사용 합니다.
for
는 null 문이 아닙니다. Null 문 (일명 빈 문)은 다른 문 (예 :)이 발생할 수있는 동일한 장소에서 발생할 if
수 있지만 다음 괄호 for
는 세미콜론 사이의 문은 허용하지 않지만 이니셜 라이저와 두 식만 선택적으로 가능합니다. 따라서 세미콜론을 통계 종결 자와 다르게 사용합니다. 빈 문장은 마지막 세미콜론 일 것입니다for(;;);
Java는 인간 언어와 일치하지 않는 방식으로 설계되었으므로 사용합니다. C의 경우도 마찬가지입니다.
성명은 statement;
입니다.
if-then-else 문은 if (condition) statement; else statement;
복합 블록이있는 if-then-else 문은 if (condition) {statements} else {statements}
이것은 분명 말도 안됩니다.
이에 따라 if (condition) {statements} else {statements};
논리적이고 합리적이라고 쓴다 .
Java 디자이너가 이것을 if-then-else로 처리하고 null 문을 처리하려면 괜찮습니다. 그것이 행복하다면, 행복하게하세요.
if (condition) {statements;} else {statements;}
. 또한 Java는 ;
이후에 s를 필요로하지 않는다는 점에서 일관성이 }
있습니다. 인간의 언어가 이미 물음표로 끝나는 문장 끝에 마침표를 붙이지 않는 방식과 비슷합니다. (물론, 거기에있는 !?
나 ?!
결말,하지만 사람들은 단지 근사치 ‽
1, interrobang 문자 .)