자바 의 매 거 진,주해 와 반사(1)

매 거
매 거 는 무엇 입 니까?
매 거 하 다
수학 과 컴퓨터 과학 이론 에서 한 집합 은 빈 서열 집합 이 있 는 모든 구성원 을 열거 하 는 프로그램 이나 특정한 유형의 대상 을 계산 하 는 것 이다.이 두 가지 유형 은 자주 겹 친다.이름 이 붙 은 정형 상수 의 집합 으로 일상생활 에서 흔히 볼 수 있다.예 를 들 어 요일SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY、SATURDAY이 바로 매 거 진 것 이다.그 다음 에 스 레 드 의 상태:생 성,운행,차단,대기,소멸 등 도 매 거 진 것 입 니 다.
자바 에서 의 매 거 진 것 도 비슷 하 다.
매 거 진 것 은 JDK 1.5 이후 에 도 입 된 것 이다.주요 용 도 는 상수 한 조 를 조직 하 는 것 이다.
상수 그룹 을 정의 해 야 할 때 매 거 진 을 사용 할 수 있 습 니 다.매 거 된 대상 은 유한 하고 확정 적 이다.
매 거 자체 가 하나의 유형 이 고 그 구조 방법 은 기본적으로 사유 이다.
매 거 진 대상 이 하나 밖 에 없다 면 단일 모델 의 실현 방식 으로 할 수 있다.
매 거 류 의 실현
사용자 정의 매 거 진 클래스 구현
jdk 1.5 이전에 사용자 정의 방식 으로 매 거 진 클래스 의 정 의 를 실현 합 니 다.

package enumDemo;
/**
 * user:ypc;
 * date:2021-06-22;
 * time: 18:21;
 *         
 */
public class EnumDemo1 {
    public static void main(String[] args) {
        Season spring = Season.SPRING;
        System.out.println(spring);
    }
}
//           
class Season {
    //1.          ,      private final    
    private final String seasonName;
    private final String seasonDesc;
    //2.       ,               
    private Season(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    //3.          ,   。            
    public static final Season SPRING = new Season("  ", "    ");
    public static final Season SUMMER = new Season("  ", "    ");
    public static final Season AUTUMN = new Season("  ", "    ");
    public static final Season WINTER = new Season("  ", "    ");
    //            
    public String getSeasonName() {
        return seasonName;
    }
    public String getSeasonDesc() {
        return seasonDesc;
    }
    @Override
    public String toString() {
        return "Season{" +
                "seasonName='" + seasonName + '\'' +
                ", seasonDesc='" + seasonDesc + '\'' +
                '}';
    }
}
在这里插入图片描述
키워드 enum 을 사용 하여 매 거 진 클래스 를 정의 합 니 다.
jdk 1.5 enum 키워드 도입

package enumDemo;
import org.junit.Test;
/**
 * user:ypc;
 * date:2021-06-22;
 * time: 18:40;
 *   enum         
 */
public class EnumDemo2 {
    @Test
    public void test(){
        SeasonEnum spring = SeasonEnum.SPRING;
        System.out.println(spring);
        //       
        System.out.println("       :"+SeasonEnum.class.getSuperclass().getName());
    }
}
enum SeasonEnum{
    //          ,    ","  ,        ";"  
    SPRING("  ","    "),
    SUMMER("  ","    "),
    AUTUMN("  ","    "),
    WINTER("  ","    ");

    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnum(String seasonName,String seasonDesc){
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
}
在这里插入图片描述
Enum 의 상용 방법

package enumDemo;
import org.junit.Test;
/**
 * @author ypc
 * @create 2021-06-22;
 *         
 */
public class EnumDemo3 {
    @Test
    public void test() {
        //toString  
        System.out.println(SeasonEnum.SPRING.toString());
        System.out.println("****************************");
        //values  .
        SeasonEnum[] seasonEnums = SeasonEnum.values();
        System.out.println("         :");
        for (SeasonEnum seasonenum : seasonEnums) {
            System.out.println(seasonenum);
        }
        System.out.println("****************************");
        //              
        Thread.State[] states = Thread.State.values();
        System.out.println("           :");
        for (int i = 0; i < states.length; i++) {
            System.out.println(states[i]);
        }
        System.out.println("****************************");
        //valueOf  
        SeasonEnum winter = SeasonEnum.valueOf("WINTER");
        System.out.println(winter);
    }
}
在这里插入图片描述
인터페이스의 매 거 진 클래스 를 실현 하 다
인 터 페 이 스 를 실현 하고 매 거 진 유형 에서 추상 적 인 방법 을 실현 한다.

interface info {
    void show();
}
enum SeasonEnumImplementsInterface1 implements info {
    //          ,    ","  ,        ";"  
    SPRING("  ", "    "),
    SUMMER("  ", "    "),
    AUTUMN("  ", "    "),
    WINTER("  ", "    ");

    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnumImplementsInterface1(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
    @Override
    public void show() {
        System.out.println("             ");
    }
}
在这里插入图片描述
인터페이스의 모든 매 거 대상 이 각자 의 방법 을 실현 하도록 하 다.

//                 
enum SeasonEnumImplementsInterface2 implements info {
    //          ,    ","  ,        ";"  
    SPRING("  ", "    ") {
        @Override
        public void show() {
            System.out.println("    ");
        }
    },
    SUMMER("  ", "    ") {
        @Override
        public void show() {
            System.out.println("    ");
        }
    },
    AUTUMN("  ", "    ") {
        @Override
        public void show() {
            System.out.println("    ");
        }
    },
    WINTER("  ", "    ") {
        @Override
        public void show() {
            System.out.println("    ");
        }
    };

    private final String seasonName;
    private final String seasonDesc;
    private SeasonEnumImplementsInterface2(String seasonName, String seasonDesc) {
        this.seasonName = seasonName;
        this.seasonDesc = seasonDesc;
    }
}
在这里插入图片描述

public class EnumDemo4 {
    @Test
    public void test1(){
        SeasonEnumImplementsInterface1[] SeasonEnumImplementsInterface1s = SeasonEnumImplementsInterface1.values();
        System.out.println("         :");
        for (SeasonEnumImplementsInterface1 seasonEnumImplementsInterface1:SeasonEnumImplementsInterface1s) {
            System.out.println(seasonEnumImplementsInterface1);
            seasonEnumImplementsInterface1.show();
        }
    }
    @Test
    public void test2(){
        SeasonEnumImplementsInterface2[] SeasonEnumImplementsInterface2s = SeasonEnumImplementsInterface2.values();
        System.out.println("         :");
        for (SeasonEnumImplementsInterface2 seasonEnumImplementsInterface2:SeasonEnumImplementsInterface2s) {
            System.out.println(seasonEnumImplementsInterface2);
            seasonEnumImplementsInterface2.show();
        }
    }
}
주해
주해 개술
자바 에서 주해Annotation는 자바 5 에서 시 작 된 메타 정 보 를 도입 하여 자바 코드 의 메타 정 보 를 묘사 합 니 다.일반적인 상황 에서 주 해 는 코드 의 집행 에 직접적인 영향 을 주지 않 습 니 다.비록 일부 주 해 는 코드 실행 에 영향 을 줄 수 있 지만.
Annotation사실은 코드 에 있 는 특수 한 태그 입 니 다.이 표 지 는 컴 파일,클래스 로 딩,실행 시 읽 히 고 해당 하 는 처 리 를 수행 할 수 있 습 니 다.Annotation 을 사용 하면 프로그래머 는 원 논 리 를 바 꾸 지 않 고 원본 파일 에 추가 정 보 를 삽입 할 수 있 습 니 다.
Annotation 은 패 킷,클래스,구조 기,방법,구성원 변수,파라미터,부분 변수의 성명 을 수식 하 는 데 사용 할 수 있 으 며 이 정 보 는 Annotation 의'name=value'쌍 에 저 장 됩 니 다.
JavaSE 에서 주해 의 사용 목적 은 비교적 간단 하 다.예 를 들 어 유행 이 지난 기능 을 표시 하고 경 고 를 무시 하 는 등 이다.
어느 정도 프레임=주해+반사 메커니즘+디자인 모델
흔 한 주해
1.문서 에 대한 설명 생 성
2.컴 파일 할 때 포맷 검사
3.코드 의 의존성 을 추적 하여 프로필 을 대체 하 는 기능 을 실현 합 니 다.

package AnnotationDemo;
/**
 * 1.         
 * @author ypc
 * @create 2021-06-22;
 */
public class AnnotationDemo1 {
}
class B implements A{
    //2.             
    @Override
    public void test() {
    }
}
interface A{
    void test();
}
/**
 * 3.        ,           
 *         
  <servlet>
    <servlet-name>reg</servlet-name>
    <servlet-class>service.RegServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>reg</servlet-name>
    <url-pattern>/reg</url-pattern>
  </servlet-mapping>
       :
 @WebServlet("/reg")
 */
총결산
이 글 의 전반 부 는 여기까지 입 니 다.당신 에 게 도움 이 되 기 를 바 랍 니 다.또한 당신 이 우리 의 더 많은 내용 에 관심 을 가 져 주 기 를 바 랍 니 다!

좋은 웹페이지 즐겨찾기