Java 열거형 클래스 소개: (Java 학습 영상 추천: java 영상 튜토리얼)
1. 열거형 클래스는 어떤 상황에서 사용해야 하나요?
때때로 클래스의 객체가 제한되어 고정되어 있는 경우에는 열거형 클래스를 사용하는 것이 더 편리합니다.
2. 열거형 클래스를 대체하기 위해 정적 상수를 사용하는 것은 어떨까요?
public static final int SEASON_SPRING = 1; public static final int SEASON_SUMMER = 2; public static final int SEASON_FALL = 3; public static final int SEASON_WINTER = 4;
열거형 클래스가 더 직관적이고 유형이 안전합니다. 상수를 사용하면 다음과 같은 단점이 있습니다.
1 unsafe를 입력합니다. 메소드에서 전달되는 시즌 매개변수가 필요한 경우 상수가 사용되면 형식 매개변수는 int 유형이 됩니다. 개발자는 모든 유형의 int 값을 전달할 수 있지만 열거형 유형인 경우에만 전달할 수 있습니다. 열거형 클래스에 전달됩니다.
2. 네임스페이스가 없습니다. 개발자는 이름을 지정할 때 SEASON_으로 시작해야 합니다. 그러면 다른 개발자가 이 코드를 볼 때 이 네 가지 상수가 계절을 나타낸다는 것을 알 수 있습니다.
3. 열거형 클래스 시작하기
먼저 간단한 열거형 클래스를 살펴보겠습니다.
package enumcase;public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER; }
enum은 클래스 및 인터페이스와 동일한 상태를 갖습니다. enum을 사용하여 정의된 열거형 클래스는 Object 클래스를 상속하는 대신 기본적으로 java.lang.Enum을 상속합니다. 열거형 클래스는 하나 이상의 인터페이스를 구현할 수 있습니다. 열거형 클래스의 모든 인스턴스는 new 키워드를 사용하거나 명시적으로 생성자를 호출하지 않고 첫 번째 줄에 표시되어야 합니다. 공개 정적 최종 수정 사항을 자동으로 추가합니다. enum을 사용하여 정의된 비추상 열거형 클래스는 기본적으로 final로 장식되며 상속될 수 없습니다. 열거형 클래스의 생성자는 비공개일 수만 있습니다.
4. 열거형 클래스 소개
속성 및 메서드는 열거형 클래스에서도 정의할 수 있지만 정적이거나 비정적입니다.
package enumcase;public enum SeasonEnum { SPRING("春天"),SUMMER("夏天"),FALL("秋天"),WINTER("冬天"); private final String name; private SeasonEnum(String name) { this.name = name; } public String getName() { return name; } }
실제로 첫 번째 줄에 열거형 클래스 인스턴스를 작성할 때 기본적으로 생성자가 호출되므로 여기에 매개 변수를 전달해야 합니다. 매개 변수 없는 생성자에는 명시적인 선언이 없기 때문에 매개 변수가 있는 생성자만 가능합니다. 호출됩니다.
생성자는 비공개로 정의되어야 해당 객체가 다른 곳에서 선언될 수 없습니다. 열거형 클래스는 일반적으로 불변 클래스로 설계되어야 하며 해당 필드는 변경되어서는 안 됩니다. 이렇게 하면 코드가 더 간결해집니다. 그래서 우리는 private final로 Field를 수정합니다.
5. 열거형 클래스는 인터페이스를 구현합니다.
열거형 클래스는 하나 이상의 인터페이스를 구현할 수 있습니다. 일반 클래스와 마찬가지로 인터페이스를 구현할 때는 인터페이스에 정의된 모든 메서드를 구현해야 하며, 완전히 구현되지 않은 경우 열거형 클래스는 추상 클래스이지만 추상 수정을 명시적으로 추가할 필요는 없습니다. 기본적으로요.
package enumcase; public enum Operation { PLUS{ @Override public double eval(double x, double y) { return x + y; } }, MINUS{ @Override public double eval(double x, double y) { return x - y; } }, TIMES{ @Override public double eval(double x, double y) { return x * y; } }, DIVIDE{ @Override public double eval(double x, double y) { return x / y; } }; /** * 抽象方法,由不同的枚举值提供不同的实现。 * @param x * @param y * @return */ public abstract double eval(double x, double y); public static void main(String[] args) { System.out.println(Operation.PLUS.eval(10, 2)); System.out.println(Operation.MINUS.eval(10, 2)); System.out.println(Operation.TIMES.eval(10, 2)); System.out.println(Operation.DIVIDE.eval(10, 2)); } }
Operatio 클래스는 실제로는 추상이고 열거형 값을 생성할 수 없으므로 여기서 열거형 값을 선언할 때 추상 메서드가 구현됩니다. 이는 실제로 중괄호 부분이 클래스 본문입니다. 컴파일된 파일을 살펴볼 수 있습니다.
총 5개의 클래스 파일이 생성되었으며, 이는 PLUS, MINUS, TIMES 및 DIVIDE가 Operation의 익명 내부 클래스의 인스턴스임을 증명합니다.
6. 스위치 문의 표현식은 열거형 값이 될 수 있습니다.
Java5에는 enum 키워드와 확장된 스위치가 추가되었습니다.
package enumcase; public class SeasonTest { public void judge(SeasonEnum s) { switch(s) { case SPRING: System.out.println("春天适合踏青。"); break; case SUMMER: System.out.println("夏天要去游泳啦。"); break; case FALL: System.out.println("秋天一定要去旅游哦。"); break; case WINTER: System.out.println("冬天要是下雪就好啦。"); break; } } public static void main(String[] args) { SeasonEnum s = SeasonEnum.SPRING; SeasonTest test = new SeasonTest(); test.judge(s); } }
열거 클래스를 제한사항으로 추가하지 않고 케이스 표현식에 직접 열거 값을 씁니다.
추천: java 기본 튜토리얼
위 내용은 Java 열거형 클래스에 대한 간략한 토론(코드 포함)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!