JDK5-枚举

1. 使用普通类模拟枚举

 1 public class Weekday {
 2     private Weekday() {} // 私有化
 3
 4     public static final Weekday MONDAY = new Weekday();  // 每个枚举都是一个对象
 5     public static final Weekday TUESDAY = new Weekday();
 6
 7     public String toString() {
 8         if(this == MONDAY)
 9             return "Monday";
10         else if(...) ...
11     }
12 }

2. 使用抽象类模拟枚举

 1 public abstract class Weekday {
 2     private Weekday() {}
 3
 4     public final static Weekday MONDAY = new Weekday() {
 5         public Weekday nextDay() {
 6             return TUESDAY;
 7         }
 8     };
 9
10     public final static Weekday TUESDAY = new Weekday() {
11         public Weekday nextDay() {
12             return WEDNESDAY;
13         }
14     };
15
16     ...
17
18     public abstract Weekday nextDay();
19 }

使用抽象类模拟可以免除写大量的if-else语句,不需要对每个对象进行判断,只需要有具体实现类完成即可

3. 枚举类

1 public enum Weekday {
2     SUN, MON, TUE, WED, THU, FRI, SAT
3 }

普通的枚举类末尾不需要写分号

4. 带构造参数枚举

1 public enum Weekday {
2     SUN(5), MON(), TUE(7), WED(), THU(9), FRI, SAT;    // 必须第一行,且以分号结尾
3
4     private Weekday() {}
5     private Weekday(int number) {
6         System.out.println(number);
7     }
8 }

枚举中每个变量都是static final的

5. 带抽象函数的枚举

 1 public enum Weekday {    // enum不用abstract修饰
 2     SUN(5) {
 3         public Weekday nextDay() {
 4             return MON;
 5         }
 6     },
 7     MON() {
 8         public Weekday nextDay() {
 9             return TUE;
10         }
11     },
12     TUE() {
13         public Weekday nextDay() {
14             return WED;
15         }
16     },
17     WED() {
18         public Weekday nextDay() {
19             return THU;
20         }
21     },
22     THU() {
23         public Weekday nextDay() {
24             return FRI;
25         }
26     },
27     FRI() {
28         public Weekday nextDay() {
29             return SAT;
30         }
31     },
32     SAT() {
33         public Weekday nextDay() {
34             return SUN;
35         }
36     };
37
38     private Weekday() {}
39     private Weekday(int number) {
40         System.out.println(number);
41     }
42
43     public abstract Weekday nextDay();
44 }

6. 枚举类中的方法

  toString()  - String

  name()  - String

  ordinal()  - int

  valueOf(String name)  - Weekday

  values()  - Weekday[]

时间: 2024-07-29 03:40:11

JDK5-枚举的相关文章

java 28 - 5 JDK5的新特性 之 枚举的使用

上一章,自定义了枚举类,超级麻烦.. 所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>> 注意事项 定义枚举类要用关键字enum 所有枚举类都是Enum的子类 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略.建议不要省略 枚举类可以有构造器,但必须是private的,它默认的也是private的.枚举项的用法比较特殊:枚举(""); 枚举类也可以有抽象方法,但是枚举项

java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类

枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.举例:一周只有7天,一年只有12个月等. 回想单例设计模式:单例类是一个类只有一个实例 那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例.这才能是枚举类. 自定义枚举类. 第一版:无参构造 1 public class Direction { 2 // 创建几个实例 3 public static final Direction FRONT = new Direction(); 4 public

JDK5.0新特性-枚举

枚举 枚举是什么? 它就是一个特殊的java类. 类的定义 class 类名{} 接口的定义 interface 接口名{} 枚举的定义 enum 枚举名{} 示例 public enum Demo1{} 也会生成一个class文件. 我们对其进行反编译. 定义到我们的class文件所在目录下 执行 javap Demo1 得到的结果 public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> { stat

JDK5新特性_2.模拟枚举类型

/** * 模拟枚举 * * @author Administrator * */ public abstract class T3_WeekDay { /** * 私有化构造器,防止用户创建对象 */ private T3_WeekDay() { } // 创建两个"枚举"对象 public static final T3_WeekDay SUN = new T3_WeekDay() { /** * 用匿名内部类去重写nextDay方法,将if,else,转移成了一个个独立的类 */

Day07 jdk5.0新特性&Junit&反射

day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装MyEclipse 先安装了JDK ? MyEclipse介绍 ? MyEclipse是Eclipse的一个插件: MyEclipse是需要花钱的: MyEclipse官网不在欢迎中国人登录: ? MyEclipse使用 ? 1 创建项目 选择工作空间: 工作空间路径不能有空格和中文: 工作空间以班名

day07 MyEclipse 安装 jdk5.0 新特性

1.myeclipse的安装和使用 * eclipse:是一个免费的开发工具    * myeclipse:是一个收费的插件,破解myeclipse,        ** 安装目录的要求: 不能有中文和空格        ** 安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格    * 破解myeclipse        ** 运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 * myeclipse的使用        * 创建一个工程          

黑马程序员_java枚举的使用

1. 什么是枚举 所谓枚举是指将变量的值一一列举出来,变量的值只限于列举出来的值的范围内.比如星期,一年中的四季,颜色值等都可以使用枚举进行列举出来. 2. 枚举类的前世今生 在jdk5以前的,要使用枚举那是不可能的,因为那个时候还没有呢,从5之后就有了枚举.其实一个枚举中的实例对象都是被static final 修饰的,因此我们可以使用普通的类进行模拟. // 使用普通类来模拟一个枚举类(类用来描述星期) // 不带抽象方法 public class WeekDay { // 禁止创建对象 p

Java核心 --- 枚举

Java核心 --- 枚举 枚举把显示的变量与逻辑的数字绑定在一起在编译的时候,就会发现数据不合法也起到了使程序更加易读,规范代码的作用 一.用普通类的方式实现枚举 新建一个终态类Season,把构造方法设为私有,因为枚举值不能随意增加因为不能new出这个类的对象,所以需要定义成员变量,把new写在类的内部这样,就可以在类的外部通过访问类的静态成员变量的方式访问到枚举值通过这样的方式,只能在类的外部使用在枚举类的内部定义的枚举值 类Season里面是可以有方法的,我们设置地球又公转了四分之一方法

java 基础之枚举

问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个 解决办法: 1)  在setGrade方法中做判断,不符合格式要求就抛出异常 2)  直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入 写一个Grade类,私有构造函数,对外提供5个静态的常量表示类的实例 3)  jdk5中新定义了枚举类型,专门用于解决此类问题 4)  枚举就是一个特殊的java类,可以定义属性.方法.构造函数.实现接口.继承类 packagecn.itcast.enumeration; im

Java中枚举的使用

一. JDK5之前的实现方式 在枚举类型出现之前,java是通过在接口或者类中定义public static final 的变量来实现的. 比如对于四季的描述: --------------------------------------------------------------------------------- public interface Season {    public static final int SEASON_SPRINT = 1;    public stati