>  기사  >  类库下载  >  Java 키워드 Assert 학습

Java 키워드 Assert 학습

高洛峰
高洛峰원래의
2016-10-09 09:04:061764검색

예전에 Java 소스 코드를 공부할 때 흔하지 않은 키워드 Assert를 발견했습니다. 이 키워드의 사용법을 직접 소개하겠습니다.

assert란 무엇인가요?

jdk1.4 이후에 새로 추가된 키워드인데 없어졌습니다.

assert의 기능은 무엇인가요?

assert는 많은 프로그래밍 언어에서 주장하는 데 사용됩니다.

그런데 어설션이란 무엇일까요?

부울 표현식이 참인지 여부에 대한 단순한 판단인가요?

자, 이제 이 질문으로 바로 본론으로 들어가겠습니다.

vt vt를 주장하고 주장합니다.

assert의 번역을 보면 Assert가 주장, 유지 관리, 지속성을 의미함을 알 수 있습니다.

즉, 다음 조건을 충족해야 하며, 그렇지 않으면 오류가 발생합니다. 발생합니다.

assert 사용

assert 사용은 두 부분으로 구성됩니다.

(1) 코드에서 키워드 사용:

assert에는 두 가지 사용 방법이 있습니다.

 1)assert BooleanCondition

asssert 뒤에는 부울 표현식이 옵니다.

식의 값이 true이면 현재 조건이 요구 사항을 충족하는 것으로 간주되어 비즈니스 코드가 계속 실행됩니다.

표현식의 값이 false인 경우 현재 조건이 요구 사항을 충족하지 않는 것으로 간주되어 즉시 AssertionError가 발생합니다.

AssertionError는 Error를 확장합니다. Throwable.Throw는 거의 사용되지 않는 클래스이며 Exception이라는 하위 클래스도 있습니다. 오류는 예외와 마찬가지로 시스템이 포착하려고 시도해서는 안 되는 심각한 문제입니다.

 2)assert BooleanCondition:Excepiton

assert 뒤에는 부울 표현식과 반환 값이 기본 유형인 표현식이 옵니다.

표현식이 true일 경우 계속해서 실행(도난방지 연결: 이 글은 http://www.cnblogs.com/jilodream/에서 처음 게시됨)하고 나머지 비즈니스 코드를 실행하고, 표현식 다음 ':'은 모드가 실행되지 않습니다.

표현식이 false인 경우 ':' 다음에 오는 표현식이 실행되고 그 결과는 AssertionError 예외에 배치되어 발생합니다.

다음은 코드 예시입니다.

public class assertStudy
{
    public static void main(String args[]) 
    {
        assert 1 == 1;
        System.out.println("A Go!");
        System.out.println("\n-----------------------------------------------\n");
        assert 1 != 1 : "Wrong";
        System.out.println("B Go!");
    }
}

(2) 키워드 유효성

위 Assert에 중단점을 추가하면 디버깅 시 중단점이 발견됩니다. 일시정지는 전혀 없었지만 바로 건너뛰었습니다.

왜 이런 일이 일어나는 걸까요? 이는 Assert 키워드가 Java 시작 항목에 의해 구성되기 때문입니다.

시작 시 -ea를 통해 스위치를 켜야 합니다.

java -eaertStudy

이렇게 하면 중단점을 볼 수 있습니다. Assert 라인이 적용됩니다(기본적으로 활성화되지 않음).

그리고

java -da AssertStudy이므로 Assert가 무효화됩니다.

Eclipse에서 키워드 유효성을 활성화하는 방법은 다음과 같습니다.

메뉴 선택: 실행 --->실행...--->인수 탭

을 선택하고 VM 인수 텍스트 상자에 -ea를 입력하면 중간에 공백이 없습니다. , 주장을 금지한다는 의미입니다

(위 경로를 찾을 수 없는 경우 (도난방지 연결: 이 글은 http://www.cnblogs.com/jilodream/에서 처음 게시되었습니다)를 열어주세요. 어설션을 활성화하려면: windows -> 기본 설정 -> Java -> 설치된 JRE -> 지금 사용된 JDK 클릭 -> 편집 -> 기본 VM 인수 텍스트 상자에 입력: -ea)

assert의 필요성에 대하여

assert의 서술을 통해 Java의 if와 매우 유사하다는 것을 알 수 있었습니다. 그렇다면 Java는 왜 그러한 키워드를 추가합니까? 그리고 jdk1.4와 같은 후속 버전에 추가되어야 합니까?

assert 설명에 주의하세요. 발생한 예외는 오류입니다.

assert의 원래 의도는 해당 환경에서 정상적으로 사용하면 문제가 발생하지 않을 것이라는 조건을 판단하는 것입니다. 이러한 코드는 기본 클래스, 프레임워크 클래스, 도구 클래스와 같은 핵심 코드에 자주 나타납니다. 이러한 코드의 정상적인 작동에서는 매개변수 예외가 없습니다(도난 방지 연결: 이 기사는 http://www.cnblogs.com/jilodream/에서 처음 게시되었습니다). 그러나 일단 리플렉션, 동적 프록시 등을 통해 특정 키 값이 변경되면 수많은 비정상적인 시나리오가 발생하게 됩니다. 그리고 이러한 시나리오를 보호하기 위해 기본적으로 효과가 없는 if 판단을 다수 추가하면 기본적으로 효과가 없는 if 판단은 코드의 가독성과 단순성에 심각한 영향을 미칠 뿐만 아니라 독자가 이러한 이상함을 느끼게 됩니다. 시나리오는 자주 발생하며 시스템 성능에 일정한 영향을 미칩니다.

그리고 Assert는 구성 항목을 통해 이 코드의 적용 여부를 효과적으로 제어할 수 있습니다. 이는 실제로 매우 우아한 동작입니다.

ps 이 문단을 쓰고 나니 TV쇼핑 같은 기분이 듭니다....

다른 상황

1. -ea 및 -da가 효과적일 수 있음을 가리킵니다. 특정 수준의 클래스 및 패키지 경로를 사용하면 어설션의 유효성을 보다 유연하게 제어할 수 있습니다. 구체적인 사용법은 다음과 같습니다.

-ea java -ea는 모든 사용자 클래스의 어설션을 엽니다.

-da java -da는 모든 사용자 클래스의 어설션을 닫습니다.

- ea: java - ea:MyClass1 MyClass1

의 열기 어설션-da: java -da: MyClass1 MyClass1

의 닫기 어설션-ea: java -ea:pkg1 pkg1 패키지의 열기 어설션 -da : java

-da:pkg1 pkg1 패키지의 어설션을 닫습니다.

-ea:... java -ea:... 기본 패키지(이름이 지정되지 않은 패키지)의 어설션을 엽니다.

-da :... java -da:... 기본 패키지(이름이 지정되지 않은 패키지)의 어설션을 닫습니다.

-ea:... java -ea:pkg1... 열기 pkg1 패키지와 그 하위 패키지의 주장

-da:... java -da:pkg1... pkg1 패키지와 해당 하위 패키지의 어설션을 닫습니다.

-esa java -esa 시스템 클래스의 어설션을 엽니다.

-dsa java -dsa는 시스템 클래스의 Assertion을 닫습니다

2. Assert를 사용한다는 것은 이러한 일이 정상적인 상황에서는 절대 발생하지 않는다는 것을 알고 있음을 의미하지만 OS에서도 이러한 일이 발생한다는 것을 알고 있음을 의미합니다. 그리고 jvm은 때때로 설명할 수 없는 오류가 발생하며, 귀하의 코드를 호출하는 사람이 귀하가 생각한 것과 달리 귀하의 코드를 잘못 호출할 것이라는 보장은 없습니다. 그래서:

1) Assert는 사용자의 핵심 처리 코드에 배치되는 경우가 많습니다. Java 소스 코드를 살펴보면 소스 코드에 Assert 키워드가 많이 있음을 알 수 있습니다.

2) Assert는 일반적인 상황에서는 절대 발생하지 않는 상황을 처리하므로 일반적인 비즈니스 프로세스에서는 Assert를 사용합니다.

3) Assert는 상속 불가능

상위 클래스의 Assert가 활성화된 경우 하위 클래스의 Assert 메서드가 실행되면 기본적으로 하위 클래스가 활성화되지 않습니다.

반대로 하위 클래스의 Assert가 활성화된 경우 상위 클래스의 Assert 메서드가 실행되면 상위 클래스의 Assert가 활성화되지 않습니다.

참고문서

http://blog.sina.com.cn/s/blog_95feae0d0101hhcg.html

http://lavasoft.blog .51cto.com/62575/43735

http://www.zhihu.com/question/24461924


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.