首页 > 编程知识 正文

枚举值,枚举法例题及解题思路

时间:2023-05-06 20:31:37 阅读:249771 作者:3889

1. 枚举类概述 在某些情况下,一个类的对象是有限而且固定的。例如季节类,只有四个对象手动实现枚举类
private修饰构造器属性使用private final修饰把该类的所有实例都使用 public static final 来修饰 2. 示例代码 package com.atguigu.javase.lesson9;public class Season { //属性是固定的,说明属性是常量 private final String SEASON_NAME; private final String SEASON_DESC; //在类的外部不能创建多个对象,所以私有化构造器 private Season(String seasonName, String seasonDesc){ this.SEASON_NAME = seasonName; this.SEASON_DESC = seasonDesc; } //在类的内部常见4个对象,且这4个对象都不能被修改 public final static Season SPRING = new Season("春天","春风又绿江南岸"); public final static Season SUMMER = new Season("夏天","映日荷花别样红"); public final static Season AUTUMN = new Season("秋天","秋水共长天一色"); public final static Season WINTER = new Season("冬天","窗含西岭千秋雪");} 2. 使用enum定义枚举类 JDK1.5新增的enum关键字用于定义枚举类枚举类和普通类的区别:
使用enum定义的枚举类默认继承了java.lang.Enum类枚举类的构造器只能使用private访问控制符枚举类的所有实例必须在枚举类中显式列出(,分隔 ;结尾)。列出的实例系统会自动添加public static final修饰。所有的枚举类都提供了一个values方法,该方法可以很方便地遍历所有的枚举值。JKD1.5中可以在switch表达式中使用枚举类的对象作为表达式,case子句可以直接使用枚举值的名字,无需添加枚举类作为限定。若枚举只是一个成员,则可以作为一种单例模式的实现方式。 3. 枚举类属性 枚举类对象的属性不应允许被改动,所以应该使用private final修饰枚举类使用private final修饰的属性应该在构造器中为其赋值若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数 4. 示例代码season package com.atguigu.javase.lesson9;public class Season { //属性是固定的,说明属性是常量 private final String SEASON_NAME; private final String SEASON_DESC; //在类的外部不能创建多个对象,所以私有化构造器 private Season(String seasonName, String seasonDesc){ this.SEASON_NAME = seasonName; this.SEASON_DESC = seasonDesc; } //在类的内部常见4个对象,且这4个对象都不能被修改 public final static Season SPRING = new Season("春天","春风又绿江南岸"); public final static Season SUMMER = new Season("夏天","映日荷花别样红"); public final static Season AUTUMN = new Season("秋天","秋水共长天一色"); public final static Season WINTER = new Season("冬天","窗含西岭千秋雪");} 5. 示例代码Season2 package com.atguigu.javase.lesson9;public enum Season2 { //枚举类的实例,需要在枚举类第一行列出 SPRING("春天","春风又绿江南岸"), SUMMER("夏天","映日荷花别样红"), AUTUMN("秋天","秋水共长天一色"), WINTER("冬天","窗含西岭千秋雪"); String SEASON_NAME; String SEASON_DESC; Season2(String seasonName,String seasonDesc){ this.SEASON_NAME = seasonName; this.SEASON_DESC = seasonDesc; }} 6. 示例代码Info接口 package com.atguigu.javase.lesson9;public interface Info { String getInfo();} 7. 示例代码Season3 package com.atguigu.javase.lesson9;public enum Season3 implements Info{ //枚举类的实例,需要在枚举类第一行列出 SPRING("春天","春风又绿江南岸"), SUMMER("夏天","映日荷花别样红"), AUTUMN("秋天","秋水共长天一色"), WINTER("冬天","窗含西岭千秋雪"); String SEASON_NAME; String SEASON_DESC; Season3(String seasonName, String seasonDesc){ this.SEASON_NAME = seasonName; this.SEASON_DESC = seasonDesc; } @Override public String getInfo() { switch(this){ case SPRING:return "A"; case SUMMER:return "B"; case AUTUMN:return "C"; case WINTER:return "D"; } return null; }} 8. 示例代码Season4 package com.atguigu.javase.lesson9;public enum Season4 implements Info{ //枚举类的实例,需要在枚举类第一行列出 SPRING("春天","春风又绿江南岸") { @Override public String getInfo() { return "^^A"; } }, SUMMER("夏天","映日荷花别样红") { @Override public String getInfo() { return "^^B"; } }, AUTUMN("秋天","秋水共长天一色") { @Override public String getInfo() { return "^^C"; } }, WINTER("冬天","窗含西岭千秋雪") { @Override public String getInfo() { return "^^D"; } }; String SEASON_NAME; String SEASON_DESC; Season4(String seasonName, String seasonDesc){ this.SEASON_NAME = seasonName; this.SEASON_DESC = seasonDesc; }} 9. 示例代码EnumTestTest package test.com.atguigu.javase.lesson9; import com.atguigu.javase.lesson9.Season2;import com.atguigu.javase.lesson9.Season3;import com.atguigu.javase.lesson9.Season4;import org.junit.Test;import org.junit.Before; import org.junit.After; /** * EnumTest Tester. * 关于枚举: * 1.定义:一个类的对象是个数有限而且属性固定的。 * * 2.手动定义枚举类: * 2.1.私有化构造器 * 2.2.属性使用final来修饰 * 2.3.在类的内部创建枚举类的对象,且使用public static final修饰 * 2.4.提供一些工具方法:values(), valueOf().... * * 3.使用enum关键字定义枚举类 * 3.1.使用enum替代class声明一个类 * 3.2.枚举类对象的声明必须放在枚举类的第一行,声明对象的同时即是创建枚举类对象的过程。 * 3.3.若有属性,需使用private final修饰,使其变为常量 * 3.4.构造器默认使用private修饰。 * * 4.枚举类的常用的方法 * 4.1.values()得到所有枚举类对象的集合。 * 4.2.valueOf(Class<T> enumType, String name):根据传入的字符串得到对应enumType类型的枚举类的对象 * 5.实现接口的枚举类 * 5.1.统一在一个方法中提供各个枚举类对象的实现,可以使用switch * 5.2.在声明对象的同时,提供方法的实现 **/ public class EnumTestTest { @Test public void testEnumMethod(){ //1.遍历枚举类的方法:每个枚举类都有一个values()方法,返回枚举类对象的数组 Season2[] seasons = Season2.values(); for(Season2 season : seasons){ System.out.println(season); } //2.把一个字符串转为对应的枚举类对象 String input = "SPRING"; //第一个参数是枚举类的类型,第二个参数是对应的字符串 Season2 s = Enum.valueOf(Season2.class,input); System.out.println(s); } @Test public void testEnumAndInterface3(){ System.out.println(Season3.AUTUMN.getInfo()); } @Test public void testEnumAndInterface4(){ System.out.println(Season4.AUTUMN.getInfo()); }}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。