Java碎碎念之枚举类(Enum)

tech2023-06-14  132

枚举类的概念:

类的对象只有有限个、确定的。如:星期、性别、季节。当需要定义一组常量的时候,强烈建议使用枚举类.

枚举类的实现:

jdk1.5之前需要自定义枚举类,jdk1.5之后新增的enum关键字用于定义枚举类.

枚举只有一个对象,则可以作为一种单例模式的实现方式.

枚举类的属性: a)枚举类对象的属性不应允许被改动,所以应该使用private final修饰.(final属性应被初始化,默认值不行.) b)枚举类的使用private修饰的属性应该在构造器中为其赋值. c)若枚举类显示的定义了带参数的构造器,则在列出枚举时也必须对应的传入参数.

自定义枚举类的步骤 1)声明枚举类对象的属性(private final) 2)私有化类的构造器.并给属性初始化. 3)提供静态的当前枚举类的多个对象(供外部访问.) 4)其他诉求1: 获取枚举类对象的属性:get方法 其他诉求2: 提供tostring();

public class DiyEnum { public static void main(String[] args) { Season sprint = Season.SPRINT; System.out.println(sprint); } } class Season{ private final String name; private final String dest; private Season(String name,String dest){ this.name=name; this.dest=dest; } public static final Season SPRINT=new Season("春天","万物复苏"); @Override public String toString() { return "Season{" + "name='" + name + '\'' + ", dest='" + dest + '\'' + '}'; } } 使用enum定义枚举类 1)将原来class换成enum,则此类默认继承于java.lang.enum; 2)直接定义对象,中间用逗号隔开,定义方式为:Spring(“春天”,“春暖花开”); 3)属性依然是private final;构造器依然是private; 4)父类enum中重写过tostring方法,返回的是此对象的名字,如若需要可以重写tostring方法. public class DiyEnum1 { public static void main(String[] args) { Season1 autumn = Season1.Autumn; Season1[] values = Season1.values(); for (int i = 0; i < values.length; i++) { System.out.println(values[i]); values[i].method(); } // System.out.println(autumn); } } enum Season1 implements A { Spring("春天", "春暖花开") { @Override public void method() { System.out.println("春天在哪里啊!"); } }, Summer("夏天", "夏日炎炎") { @Override public void method() { System.out.println("宁静的夏天"); } }, Autumn("秋天", "硕果累累") { @Override public void method() { System.out.println("秋天不回来"); } }, Winter("冬天", "冰天雪地") { @Override public void method() { System.out.println("大约在冬季"); } }; private final String name; private final String dest; private Season1(String name, String dest) { this.dest = dest; this.name = name; } @Override public String toString() { return "Season1{" + "name='" + name + '\'' + ", dest='" + dest + '\'' + '}'; } }

常用的方法 1)values():遍历枚举类所有的常量. 2)valueof(String objname),返回枚举类中对象名是objname的对象,如果枚举类中没有此对象,则抛出异常:IllegalArgumentException 3)tostring方法.

枚举中关于接口的使用(见上面的代码块) 1)直接implements 接口名,在枚举类中书写方法体,但是每个对象都只能调用同一个重写后的方法. 2)继承接口后,可直接在对象后面用大括号重写该方法,每个对象拥有自己不同的该方法体.

最新回复(0)