zoukankan      html  css  js  c++  java
  • 枚举

    枚举

    使用 enum 定义枚举类

    JDK 1.5 新增的 enum 关键字用于定义枚举类
    枚举类和普通类的区别

    • 使用 enum 定义的枚举类默认继承了 java.lang.Enum
    • 枚举类的构造器只能使用 private 访问控制符
    • 枚举类的所有实例必须在枚举类中显式列出(,分隔;结尾). 列出的实例系统会自动添加 public static final 修饰
    • 所有的枚举类都提供了一个 values 方法, 该方法可以很方便地遍历所有的枚举值
    • JDK 1.5 中可以在 switch 表达式中使用枚举类的对象作为表达式, case 子句可以直接使用枚举值的名字, 无需添加枚举类作为限定
    • 若枚举只有一个成员, 则可以作为一种单子模式的实现方式

    枚举类的属性

    • 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰
    • 枚举类使用 private final 修饰的属性应该在构造器中为其赋值
    • 若枚举类显式的定义了带参数的构造器, 则在列出枚举值时也必须对应的传入参数
    public enum Week {
    
    	MONDAY("MON"), TUESDAY("TUES"), WEDNESDAY("WED"), THURSDAY("THUR"), FRIDAY("FRI"), SATURDAY("SAT"), SUNDAY("SUN");
    	// 必须要先定义枚举类型,才能定义方法
    
    	private String abbr;
    	// 声明的一个字符串,用于保存缩写信息
    
    	private Week(String abbr) {
    		this.abbr = abbr;
    	}
    	// 声明的一个私有构造方法,该方法只能在构造枚举常量时被调用,可以使枚举元素具有指定的缩写信息
    
    	public String getAbbr() {
    		return abbr;
    	}
    	// 通过该方法获得枚举元素的缩写
    }
    
    public class EnumPractice {
    	public static void main(String[] args) {
    		for (Week week : Week.values()) {
    			System.out.println("The order of " + week + " is " + week.ordinal());
    			// 使用ordinal()方法查看枚举元素的顺序
    
    			System.out.println("Compare to MONDAY : " + week.compareTo(Week.MONDAY));
    			// 用compareTo()方法来将当前枚举元素与Week.MONDAY比较
    
    			System.out.println("Equal to MONDAY ? " + week.equals(Week.MONDAY));
    			// 用equals()方法来将当前枚举元素与Week.MONDAY比较
    
    			System.out.println("Equal to MONDAY by == ? " + (week == Week.MONDAY));
    			// 用比较运算符==来将当前枚举元素与Week.MONDAY比较
    			// 从这里你应该可以看到,可以直接使用==来比较两个枚举元素
    
    			System.out.println("Name : " + week.name());
    			// 使用name()方法获得枚举元素的名称
    
    			System.out.println("Abbreviation : " + week.getAbbr());
    			// 使用自定义的getAbbr()方法输出星期的缩写
    
    			System.out.println("-------------------");
    			// 在每次循环快要结束时,打印一条分割线用于区分
    		}
    	}
    }
    

    点击查看结果

    ``` The order of MONDAY is 0 Compare to MONDAY : 0 Equal to MONDAY ? true Equal to MONDAY by == ? true Name : MONDAY Abbreviation : MON ------------------- The order of TUESDAY is 1 Compare to MONDAY : 1 Equal to MONDAY ? false Equal to MONDAY by == ? false Name : TUESDAY Abbreviation : TUES ------------------- The order of WEDNESDAY is 2 Compare to MONDAY : 2 Equal to MONDAY ? false Equal to MONDAY by == ? false Name : WEDNESDAY Abbreviation : WED ------------------- The order of THURSDAY is 3 Compare to MONDAY : 3 Equal to MONDAY ? false Equal to MONDAY by == ? false Name : THURSDAY Abbreviation : THUR ------------------- The order of FRIDAY is 4 Compare to MONDAY : 4 Equal to MONDAY ? false Equal to MONDAY by == ? false Name : FRIDAY Abbreviation : FRI ------------------- The order of SATURDAY is 5 Compare to MONDAY : 5 Equal to MONDAY ? false Equal to MONDAY by == ? false Name : SATURDAY Abbreviation : SAT ------------------- The order of SUNDAY is 6 Compare to MONDAY : 6 Equal to MONDAY ? false Equal to MONDAY by == ? false Name : SUNDAY Abbreviation : SUN ------------------- ```
    public class JavaSwitchEnumExample {
    	public enum Day {
    		Sun, Mon, Tue, Wed, Thu, Fri, Sat
    	}
    	public static void main(String args[]) {
    		Day[] DayNow = Day.values();
    		for (Day Now : DayNow) {
    			switch (Now) {
    			case Sun:
    				System.out.println("Sunday");
    				break;
    			case Mon:
    				System.out.println("Monday");
    				break;
    			case Tue:
    				System.out.println("Tuesday");
    				break;
    			case Wed:
    				System.out.println("Wednesday");
    				break;
    			case Thu:
    				System.out.println("Thursday");
    				break;
    			case Fri:
    				System.out.println("Friday");
    				break;
    			case Sat:
    				System.out.println("Saturday");
    				break;
    			}
    		}
    	}
    }
    

    点击查看结果

    ``` Sunday Monday Tuesday Wednesday Thursday Friday Saturday ```
    public enum Day {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
        THURSDAY, FRIDAY, SATURDAY 
    }
    
    public class EnumTest {
    	Day day;
    
    	public EnumTest(Day day) {
    		this.day = day;
    	}
    
    	public void tellItLikeItIs() {
    		switch (day) {
    		case MONDAY:
    			System.out.println("Mondays are bad.");
    			break;
    
    		case FRIDAY:
    			System.out.println("Fridays are better.");
    			break;
    
    		case SATURDAY:
    		case SUNDAY:
    			System.out.println("Weekends are best.");
    			break;
    
    		default:
    			System.out.println("Midweek days are so-so.");
    			break;
    		}
    	}
    
    	public static void main(String[] args) {
    		EnumTest firstDay = new EnumTest(Day.MONDAY);
    		firstDay.tellItLikeItIs();
    		EnumTest thirdDay = new EnumTest(Day.WEDNESDAY);
    		thirdDay.tellItLikeItIs();
    		EnumTest fifthDay = new EnumTest(Day.FRIDAY);
    		fifthDay.tellItLikeItIs();
    		EnumTest sixthDay = new EnumTest(Day.SATURDAY);
    		sixthDay.tellItLikeItIs();
    		EnumTest seventhDay = new EnumTest(Day.SUNDAY);
    		seventhDay.tellItLikeItIs();
    	}
    }
    

    点击查看结果

    ``` Mondays are bad. Midweek days are so-so. Fridays are better. Weekends are best. Weekends are best. ```

    参考资料:
    https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html

  • 相关阅读:
    关于两次fork
    阻塞非阻塞与同步异步的区别
    函数调用堆栈
    数组
    64位操作系统与32位操作系统数据类型的字节数
    Redis 键(key)
    Redis 命令
    Redis 安装
    Redis 配置
    MongoDB 安装
  • 原文地址:https://www.cnblogs.com/hgnulb/p/10091050.html
Copyright © 2011-2022 走看看