>  기사  >  Java  >  Java 열거_Power 노드 요약

Java 열거_Power 노드 요약

Y2J
Y2J원래의
2017-05-02 14:52:551736검색

enum의 전체 이름은 enumeration입니다. JDK 5에 도입된 새로운 기능으로 java.lang 패키지에 저장됩니다. 이 글에서는 Java 열거형에 관련된 지식을 소개하겠습니다. 필요하신 분들은 참고하시면 됩니다.

enum의 정식 명칭은 Enumeration입니다. JDK 5에 도입된 새로운 기능으로 Java에 저장됩니다. .lang 패키지.

원래 인터페이스 정의 상수

public interface IConstants {
  String MON = "Mon";
  String TUE = "Tue";
  String WED = "Wed";
  String THU = "Thu";
  String FRI = "Fri";
  String SAT = "Sat";
  String SUN = "Sun";
}

구문(정의)

enum 키워드를 사용하여 열거형을 만듭니다. 생성된 유형이 java.lang.Enum 클래스(java.lang.Enum은 추상 클래스임)의 하위 클래스임을 암시합니다. 열거 유형은 Class Enum> 일반 패턴을 따르며, 여기서 E는 열거 유형의 이름을 나타냅니다. 열거형 유형의 각 값은 보호된 Enum(String name, int ordinal) 생성자에 매핑됩니다. 여기서 각 값의 이름은 문자열로 변환되며 서수 설정은 이 설정이 생성된 순서를 나타냅니다.

package com.bjpowernode.test;
/**
 * 枚举测试类
 */
public enum EnumTest {
  MON, TUE, WED, THU, FRI, SAT, SUN;
}

이 코드는 실제로 Enum(String name, int ordinal)을 7번 호출합니다.

new Enum<EnumTest>("MON",0);
new Enum<EnumTest>("TUE",1);
new Enum<EnumTest>("WED",2);
  ... ...

순회 및 전환과 같은 일반적인 작업

예제 코드 순회 및 전환 열거형:

public class Test {
  public static void main(String[] args) {
    for (EnumTest e : EnumTest.values()) {
      System.out.println(e.toString());
    }
    System.out.println("----------------我是分隔线------------------");
    EnumTest test = EnumTest.TUE;
    switch (test) {
    case MON:
      System.out.println("今天是星期一");
      break;
    case TUE:
      System.out.println("今天是星期二");
      break;
    // ... ...
    default:
      System.out.println(test);
      break;
    }
  }
}

출력 결과:

MON
TUE
WED
THU
FRI
SAT
SUN

---나는 구분선이다------

오늘은 화요일

열거형 개체의 일반적인 메서드 소개

int compareTo(E o)

이 열거형의 순서를 지정된 개체와 비교합니다.

Class<E> getDeclaringClass()

이 열거형 상수의 열거형에 해당하는 클래스 객체를 반환합니다.

String name()

열거형 선언에 선언된 대로 이 열거형 상수의 이름을 반환합니다.

int ordinal()

열거형 상수의 서수(초기 상수 서수가 0인 열거형 선언에서의 해당 위치)를 반환합니다.

String toString()

선언에 포함된 열거형 상수의 이름을 반환합니다.

static 00d368726a2a56641bd42374047e1f94> T valueOf(Class

                                           지정된 이름을 가진 열거형입니다.

public class Test {
  public static void main(String[] args) {
    EnumTest test = EnumTest.TUE;
    //compareTo(E o)
    switch (test.compareTo(EnumTest.MON)) {
    case -1:
      System.out.println("TUE 在 MON 之前");
      break;
    case 1:
      System.out.println("TUE 在 MON 之后");
      break;
    default:
      System.out.println("TUE 与 MON 在同一位置");
      break;
    }
    //getDeclaringClass()
    System.out.println("getDeclaringClass(): " + test.getDeclaringClass().getName());
    //name() 和 toString()
    System.out.println("name(): " + test.name());
    System.out.println("toString(): " + test.toString());
    //ordinal(), 返回值是从 0 开始
    System.out.println("ordinal(): " + test.ordinal());
  }
}

출력 결과:

월 이후 TUE

getDeclaringClass(): com.hmw.test.EnumTest
name(): TUE
toString(): TUE
ordinal(): 1

enum 사용자 지정 속성 및 메서드 제공

enum 개체 추가 값 속성과 getValue() 메소드를 살펴보십시오.

package com.bjpowernode.test;
 /**
 * 枚举测试类
 * 
 */
public enum EnumTest {
  MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) {
    @Override
    public boolean isRest() {
      return true;
    }
  },
  SUN(0) {
    @Override
    public boolean isRest() {
      return true;
    }
  };
  private int value;
  private EnumTest(int value) {
    this.value = value;
  }
  public int getValue() {
    return value;
  }
  public boolean isRest() {
    return false;
  }
}
public class Test {
  public static void main(String[] args) {
    System.out.println("EnumTest.FRI 的 value = " + EnumTest.FRI.getValue());
  }
}

출력 결과:

EnumTest.FRI 的 value = 5
EnumSet,EnumMap 的应用
public class Test {
  public static void main(String[] args) {
    // EnumSet的使用
    EnumSet<EnumTest> weekSet = EnumSet.allOf(EnumTest.class);
    for (EnumTest day : weekSet) {
      System.out.println(day);
    }
    // EnumMap的使用
    EnumMap<EnumTest, String> weekMap = new EnumMap(EnumTest.class);
    weekMap.put(EnumTest.MON, "星期一");
    weekMap.put(EnumTest.TUE, "星期二");
    // ... ...
    for (Iterator<Entry<EnumTest, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
      Entry<EnumTest, String> entry = iter.next();
      System.out.println(entry.getKey().name() + ":" + entry.getValue());
    }
  }
}

원리 분석

enum의 구문 구조는 다음과 같습니다. 클래스와 동일 구문은 다르지만 컴파일러에서 컴파일한 후 생성되는 것이 클래스 파일입니다. 클래스 파일을 디컴파일하면 실제로 java.lang.Enum1a4db2c2c2313771e5742b6debf617a1을 상속받은 클래스가 생성되는 것을 확인할 수 있습니다. EnumTest를 디컴파일한 후(javap com.hmw.test.EnumTest 명령) 얻은 내용은 다음과 같습니다.

public class com.hmw.test.EnumTest extends java.lang.Enum{
  public static final com.hmw.test.EnumTest MON;
  public static final com.hmw.test.EnumTest TUE;
  public static final com.hmw.test.EnumTest WED;
  public static final com.hmw.test.EnumTest THU;
  public static final com.hmw.test.EnumTest FRI;
  public static final com.hmw.test.EnumTest SAT;
  public static final com.hmw.test.EnumTest SUN;
  static {};
  public int getValue();
  public boolean isRest();
  public static com.hmw.test.EnumTest[] values();
  public static com.hmw.test.EnumTest valueOf(java.lang.String);
  com.hmw.test.EnumTest(java.lang.String, int, int, com.hmw.test.EnumTest);
}

그래서 사실 enum은 클래스이지만 Java 컴파일러는 구문 분석과 방금 컴파일했습니다.

요약

enum은 모두 일부 속성과 메서드를 정의할 수 있습니다. 차이점은 enum이 상속 키워드를 사용할 수 없다는 것입니다. 다른 클래스. enum이 java.lang.Enum을 상속했기 때문입니다(java는 단일 상속입니다).

위 내용은 Java 열거_Power 노드 요약의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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