例如我们描述季节也可以使用常量:
public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int FALL = 3;
public static final int WINTER = 4;
相比于静态的常量枚举类更加直观,类型更加安全。
使用常量会有以下几个缺陷:
1. 类型不安全
若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。
2. 没有命名空间
开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
二、枚举类的使用
枚举是JDK1.5新增的一个特性,它使用关键字enum来定义。
跟我们定义class不一样的是,通常enum中的成员都是枚举类对象,并且默认省略了public static final定义,这也意味着我们使用枚举类的时候不需要创建枚举类对象直接调用即可。
枚举类的定义
下面我们先来定义一个简单的枚举类看下跟之前定义class有什么不同。
枚举类有以下几个特点:
1. enum和class、interface的地位一样
2. 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类,并且枚举类可以实现一个或多个接口。
3. 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
4. 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
5. 枚举类的构造器只能是私有的。
枚举类内也可以定义属性和方法,可以是静态的和非静态的。
实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有写无参构造器,只能调用有参数的构造器。
public static final int SPRING = 1;
public static final int SUMMER = 2;
public static final int FALL = 3;
public static final int WINTER = 4;
相比于静态的常量枚举类更加直观,类型更加安全。
使用常量会有以下几个缺陷:
1. 类型不安全
若一个方法中要求传入季节这个参数,用常量的话,形参就是int类型,开发者传入任意类型的int类型值就行,但是如果是枚举类型的话,就只能传入枚举类中包含的对象。
2. 没有命名空间
开发者要在命名的时候以SEASON_开头,这样另外一个开发者再看这段代码的时候,才知道这四个常量分别代表季节。
二、枚举类的使用
枚举是JDK1.5新增的一个特性,它使用关键字enum来定义。
跟我们定义class不一样的是,通常enum中的成员都是枚举类对象,并且默认省略了public static final定义,这也意味着我们使用枚举类的时候不需要创建枚举类对象直接调用即可。
枚举类的定义
下面我们先来定义一个简单的枚举类看下跟之前定义class有什么不同。
枚举类有以下几个特点:
1. enum和class、interface的地位一样
2. 使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类,并且枚举类可以实现一个或多个接口。
3. 枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。
4. 使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。
5. 枚举类的构造器只能是私有的。
枚举类内也可以定义属性和方法,可以是静态的和非静态的。
实际上在第一行写枚举类实例的时候,默认是调用了构造器的,所以此处需要传入参数,因为没有写无参构造器,只能调用有参数的构造器。