2015-01-10 5 views
-1

나는 java -ea HelloWorld와 같은 코드를 실행했고 AssertionError가 보여주고있는 다른 코드들에 대해서는이 특정 코드에 대해 어떤 AssertionError도 얻지 못했다.왜 프로그램에 AssertionError가 표시되지 않습니까?

public class HelloWorld{ 

    public static void main(String []args){ 
     boolean b=true; 
     assert(b==true); 
     b=false;  
    } 
} 
+1

어설 션은 어설 션이 배치 된 코드의 지점에있는 조건에만 적용됩니다. 'assert' 문 다음에 * assert 된 값을 변경해도 assertion check가 재 적용되지 않습니다. – hatchet

답변

0

b==true은 어설 션이 실행될 때 수행하는 것입니다. 어설 션이 거짓이면 AssertionError이 발생합니다. Oracle documentation:

에서 각각의 주장은 주장이 실행될 때 사실이 될 것으로 예상 부울 식을 포함. 사실이 아니라면, 시스템은 오류를 던집니다. 부울 표현식이 참 사실이라고 확인함으로써, 주장은 프로그램이 오류

그리고 그것은 2 개 가지 방법으로 적용 할 수 없는지 자신감을 증가 프로그램의 동작에 대한 당신의 가정을 확인 :

어설 션문에는 두 가지 형식이 있습니다. 첫 번째 간단한 양식은 다음과 같습니다.

assert표현식 1;

여기서 표현식 1boolean 표현입니다. 시스템이 어설 션을 실행하면 Expression1을 평가하고 false 인 경우 세부 메시지없이 AssertionError을 던집니다.

주장 문장의 두 번째 형태는 다음

assert만일 Expression1 : Expression2 위;

  • 만일 Expression1boolean 표현 :

    .

  • 표현식 2은 값이있는 표현식입니다. (이 무효 선언 된 메소드의 호출이 될 수 없습니다.)

사용 AssertionError에 대한 상세 메시지를 제공하는 assert 문이 버전. 시스템은 Expression2의 값을 적절한 AssertionError 생성자에 전달합니다. 생성자는 값의 문자열 표현을 오류의 세부 메시지로 사용합니다.

어설 표현 : message_if_not_true

당신의 주장이 False로 평가되는 경우 따라서, 당신은 오류 메시지가 표시됩니다 자바의 주장이 어떻게 작동하는지 파악하지 않은 경우

+0

내가 assert에 대해 이해하는 것은 예를 들어 assert (x> 5)를 쓰면 프로그램에서 x = 4를 지정하면 어설 션 오류가 표시되거나 x가 5보다 큰 값을 가져야한다고 표시됩니다. 이제 위의 코드에서 동일한 논리를 assert (b == true)로 적용합니다. 그래서, 코드에서 B의 값을 NOT true로 재 할당하면 AssertionError가 발생합니다. –

+0

@SamarthMishra 내가 연결된 Oracle 문서를 읽으십시오. ** 각 어설 션에는 어설 션이 실행될 때 true가 될 것이라고 생각하는 부울식이 포함되어 있습니다. **. 그것은 시스템의 가치를 주장하지 않습니다. 다른 코드와 마찬가지로 평가됩니다. – mkobit

+0

알았습니다! 고마워요. –

1

. (B)가 이전 라인에 true로 설정되어 있기 때문에

assert(b == true) 

는 AssertionError를 발생하지 않습니다 : 뭐

. 어설 션에 대한 Java Oracle 설명서를 확인하십시오.

+0

감사합니다. 이미 삭제되었습니다. 그러나 다시 한 번 감사드립니다. –