2009-07-17 4 views
3

다음 자바 코드는 어떻게해야합니까?java assert가 이상한 결과를 낸다

public class foo{ 
    public static void main(String[] args){ 
     boolean mybool=false; 
     assert (mybool==true); 
    } 
} 

어설 션 오류가 발생합니까? 왜 안되면? (어떤 오류도 발생하지 않습니다!)

답변

0

이것은 AssertionErors을 던집니다.

Eclipse를 사용하고 있다면 어설 션을 켜야합니다. 기본적으로 사용 중지되었습니다.

이렇게하려면 JVM 인수에 -ea를 추가하십시오. 프로그램을 실행하면

+1

VM 런타임에 -ea를 추가하십시오. –

+0

Bah .... 누구나 대답 할 수 있기 전에 허용됩니다. – skaffman

+0

2 사람들이 대답 할 기회가 있습니다 ... – jjnguy

4

, 당신은 명령 줄에 '-ea'을 추가하여 자바 VM의 주장을 활성화해야합니다 :

java -ea -jar myprogram.jar 
+1

고마워! 그것이해야대로 일 했어! 초고속 회신을 위해 건배! –

1

Java 언어 주장 이상한입니다. 커맨드 라인을 시작할 때 그것들을 활성화시켜야하는데, 나는 그것을 좋아하지 않는다.

이러한 이유로 저는 제 3 자 라이브러리를 사용하여 제 주장을하는 경향이 있습니다. Apache Commons Lang (Validator 클래스를 통해), Spring (Assert 클래스를 통해) 또는 JUnit4 (Assert 클래스를 통해)는 모두이 기능을 제공하며 VM 설정에 관계없이 작동합니다. Java5 정적 가져 오기를 사용하면 Java 어설 션과 마찬가지로 사용하기 쉽고 유연성이 뛰어납니다. 또한 예외에서 오류 메시지를 지정할 수 있습니다.

+0

기본값은 짜증나지만 이전 버전과의 호환성을 위해 있습니다. 다른 것들을 위해서 : 당신은 자바 어설 션으로 메시지를 지정할 수 있으며, 사용되지 않을 때 바이트 코드에서 제거되도록 afaik가 보증됩니다. 즉, 생산 성과에 대해 크게 걱정할 필요가 없습니다. 제 3 자 라이브러리에서 이것이 가능할 것으로 의심됩니다. –

+0

사실이지만, 이러한 것들을 확인하기위한 성능 저하는 현대 VM에서는 전혀 중요하지 않습니다. – skaffman

+0

언어 어설 션으로 많은 가중치 어설 션을 넣을 수 있으며 프로덕션 배포에서 제거 될 것임을 알 수 있습니다. 어설 션은 바이트 코드에서 제거되지 않으며 VM은 플래그에 따라 런타임시이를 제거합니다. –

0

어설 션을 프로그램에서 액세스 할 수 있도록 설정하면 정보가 만들어집니다.

어설 션을 사용하지 않으면 (기본값 임) 어설 션 문이 실행되지 않으며 mybool의 값이 false가됩니다.

어설 션을 사용하는 경우 (jvm 인수 -ea) 어설 션이 실행되고 부작용으로 인해 mybool이 true로 설정됩니다.

어설 션을 사용하거나 사용하지 않도록 설정할 수 있습니다. 예를 들어 테스트를 실행할 때 어설 션을 항상 실행하도록하기 위해 어설 션을 사용하지 않으면 TestSuites에서 Test가 실패합니다.

관련 문제