자바 상용 문법 사탕 깊이 이해

13615 단어 자바
문법 사탕 의 존 재 는 주로 개발 자 들 이 사용 하기에 편리 하고 프로그램 을 더욱 간결 하 게 하 며 프로그램의 가 독성 을 향상 시 키 는 것 이다.자바 가상 머 신 은 이러한 문법 사탕 을 지원 하지 않 습 니 다.이런 문법 사탕 은 컴 파일 단계 에서 간단 한 기초 문법 구조 로 복원 되 는데 이 과정 은 바로 해법 사탕 입 니 다.
글 목록
  • 1.자바 7 신규 switch String 지원
  • 2.범 형
  • 3.자동 분해 포장
  • 4.방법 이 길 어 지 는 매개 변수
  • 기타 문법 설탕:for-each/매 거/내부 클래스/컴 파일 시 최적화/try-with-resource
  • 참고 자료
  • 1.자바 7 신규 switch String 지원
    String str = "awecoder";
    switch (str) {
        case "awecoder":
            System.out.println(str);
            break;
        default:
            System.out.println("other");
    }
    

    Jad 역 컴 파일 후
    String str = "awecoder";
    String s = str;
    byte byte0 = -1;
    switch(s.hashCode())
    {
    case -1520954730: 
        if(s.equals("awecoder"))
            byte0 = 0;
        break;
    }
    switch(byte0)
    {
    case 0: // '\0'
        System.out.println(str);
        break;
    
    default:
        System.out.println("other");
        break;
    }
    

    코드 에서 보 듯 이 switch(String)는 hashCode()와 equals()방법 을 조합 하여 이 루어 졌 다.문자열 대상 의 해시 값 을 switch 작업 을 하고 내부 에서 equals 방법 을 사용 하여 해시 충돌 을 피 합 니 다.hashCode 방법 은 int 형식 을 되 돌려 줍 니 다.새로운 jdk 버 전(1.8.0221)역 컴 파일 결 과 는 많은 블 로그 와 달리 두 번 째 byte 에 대한 switch 작업 에 나타난다.
    switch 는 JDK 1.5 에 포장 유형 에 대한 지원 을 추가 합 니 다.JVM 은 컴 파일 할 때 상 자 를 뜯 는 작업 을 합 니 다.매 거 진 종 류 는 매 거 진 종류의 ordinal 방법 으로 int 형식 을 되 돌려 줍 니 다.종합 적 으로 swthich 는 기본 데이터 형식 만 지원 합 니 다.
    [문제]swthich(String)와 swthich(Integer)두 개의 작은 사례 를 동시에 실행 할 때 jad 컴 파일 코드 는 다음 과 같은 몇 마디 가 있 습 니 다.
    String str = "awecoder";
    Integer integer = str;  //  str        integer  
    switch(integer.hashCode()) {...}
    

    2.범 형
    자바 컴 파일 러 는 범 형 을 처리 할 때 코드 공유 방식 으로 모든 범 형 유형 에 유일한 바이트 코드 를 만 듭 니 다.형식 지우 기 방식 을 통 해 일반적인 형식 에서 유일한 바이트 코드 에 대한 맵 을 실현 합 니 다.
    형식 지우 기 작업 과정 은 모든 일반적인 파 라 메 터 를 가장 왼쪽 경계 형식 으로 바 꾸 고 모든 유형의 파 라 메 터 를 제거 하 는 것 입 니 다.예 를 들 어List>범 형 유형 은 역 컴 파일 후의 코드 는List이다.
    Class c1 = new ArrayList<String>().getClass();
    Class c2 = new ArrayList<Integer>().getClass();
    System.out.println(c1 == c2); // true
    

    일반적인 코드 내부 에 서 는 일반적인 유형의 매개 변수 정 보 를 얻 을 수 없습니다.사례 에서 c1 과 c2 가 얻 은 바이트 코드 는 완전히 같 습 니 다.역 컴 파일 을 통 해 우 리 는get그 중의 원인c1c2이 부 여 된 값 은 모두((new ArrayList()).getClass()입 니 다.
    3.자동 분해 포장
    자바 는 완전히 대상 을 대상 으로 하 는 언어 가 아니 라 8 가지 기본 데이터 형식 이 존재 합 니 다.대상 이 아 닙 니 다.new 를 통 해 변 수 를 만 들 필요 가 없습니다.변 수 는 스 택 에 직접 저장 합 니 다.자바 는 이러한 데이터 형식 을 더욱 잘 사용 하기 위해 각각 포장 류 를 제공 했다.포장 을 뜯 는 것 은 기본 데이터 유형 과 대상 간 의 전환 을 실현 하 는 것 이다.
    Integer i = 42;
         
    Integer i = Integer.valueOf(42);
    

    4.방법 이 길 어 지 는 매개 변수
    호출 방법 에 대한 실 참 은 가 변 적 인 매개 변수 의 실제 매개 변수 에 따라 주어진 유형의 배열 을 만 들 고 배열 을 진정한 실 참 으로 호출 방법 에 전달 합 니 다.
    method(42, "awe","coder");
    public static void method(int i, String...strs) {}
    
          
    method(42, new String[] {
        "awe", "coder"
    });
    public static transient void method(int j, String as[]){}
    

    기타 문법 설탕:for-each/매 거/내부 클래스/컴 파일 시 최적화/try-with-resource
    매 거:매 거enum에 대해 서 는 새로운 유형 이 아니 라 키워드 입 니 다.매 거 진 클래스 에 대해 우 리 는 역 컴 파일 을 통 해 알 수 있 듯 이 매 거 진 클래스 는 사실 계승Enum류 의 불가 변 류 를 만 들 었 다.
    public static final class t extends Enum
    

    내부 클래스:컴 파일 할 때의 개념 입 니 다.컴 파일 에 성공 하면 외부 클래스 와 내부 클래스 의 여러 바이트 파일 을 생 성 합 니 다.예 를 들 어 위의 내부 매 거 진 류 는 컴 파일 한 후에Test.class 와Test$t.class파일 을 얻 을 수 있다.
    컴 파일 시 최적화:JVM 은 컴 파일 할 때 최적화 할 수 있 는 부분,예 를 들 어 상수 등 을 최적화 합 니 다.다음 예 에서 i 가 final 수식 이 없 으 면 일반 변수 일 뿐 JVM 은 이 최 적 화 를 하지 않 습 니 다.
    final int i = 1;
    int j = i + 1;
          
    int i = 1;
    int j = 2;
    

    다른 컴 파일 시 최 적 화 된 예 는 조건 컴 파일 이다.예 에서 조건 부 문 구 는 JVM 에 의 해 컴 파일 되 지 않 습 니 다.마찬가지 로 여기 서도 상수 가 필요 합 니 다.
    final boolean b = false;
    if (b) {
        System.out.println("Hello, b!");
    }
         
    boolean b = false;
    

    for-each:그 내 부 는 여전히 일반 for 순환 과 교체 기 를 사용 하여 옮 겨 다 닙 니 다.
    try-with-resource 는 JDK 1.7 에 추 가 된 기능 으로 코드 가 더욱 우아 하 게 자원 을 닫 는 데 사용 된다.
    참고 자료
  • Hollis 지식 별 박문
  • 좋은 웹페이지 즐겨찾기