码迷,mamicode.com
首页 > 编程语言 > 详细

Java枚举再学习

时间:2014-07-27 10:25:02      阅读:292      评论:0      收藏:0      [点我收藏+]

标签:

枚举是JDK 5以后引入的,被称作新特性,虽然JDK 5推出已经N年了,不过鉴于这个版本在Java里程碑上的重要性,就姑且继续称作新特性吧。

枚举的定义:

1 public enum Lamp {
2     RED,GREEN,YELLOW;
3 }

枚举使用关键字enum定义,enum是enumeration的缩写。枚举的基本作用是将所需要的可选项罗列出来,以控制程序只能获得被罗列出的选项,可以当做是一种规范。而枚举元素通常采用全大写,因为枚举元素属于固定项,和常量类似。

枚举的每一个元素都代表这个枚举类本身。承上例:

 

1 public class EnumTest {
2 
3     public static void main(String[] args) {
4         Lamp lamp = Lamp.GREEN;
5     }
6 
7 }

 

使用"枚举类名.元素名"返回的永远是枚举类对象。我们可以利用这一特性进行这种设计,当前台传回一个字符串时,我们可以调用枚举类的valueOf()方法把它转换为一个枚举类对象,进而进行各种操作,这样就省去了我们大量的时间去制定将字符串转换为对象的规则。

枚举类同样可以具有抽象方法和普通方法:

 1 public enum Lamp {
 2     RED {
 3         @Override
 4         public Lamp nextLamp() {
 5             return GREEN;
 6         }
 7     },GREEN {
 8         @Override
 9         public Lamp nextLamp() {
10             return YELLOW;
11         }
12     },YELLOW {
13         @Override
14         public Lamp nextLamp() {
15             return RED;
16         }
17     };
18     
19     public abstract Lamp nextLamp(); 
20     
21     public void say() {
22         System.out.println("Hello Enum");
23     }
24 }

前文提到,枚举的每一个元素都代表一个枚举类对象,所以当定义了抽象方法后,每个枚举元素都应该去实现这个抽象方法。换句话说就是,每个枚举元素都相当于是继承自枚举类的一个子类,所以父类的抽象方法必须实现。另外,枚举类同样也可以有普通方法。

除了抽象和普通方法外,枚举类也可以具有构造方法:

 1 public enum Lamp {
 2     
 3     RED(20),GREEN,YELLOW;
 4     
 5     private Lamp() {
 6         
 7     }
 8     
 9     private Lamp(int i ) {
10         System.out.println(i);
11     }
12     
13 }

在枚举元素名后的括号内传入构造器所需参数,就可以调用对应构造器了,如:

1 public class EnumTest {
2 
3     public static void main(String[] args) {
4         Lamp lamp = Lamp.RED;
5         //控制台输出20
6     }
7 
8 }

最后要说明的是,枚举类里没有公共的构造方法,枚举是天生的单例,当你不提供构造方法时,枚举类默认提供的构造方法就是私有的,所以使用枚举类构造单例会比使用懒汉模式、饿汉模式来构造单例更简单。

当然,枚举的实际用处还是要在实际项目中才能得以体现,这次巩固复习的重点也就是这些了。

 

Java枚举再学习

标签:

原文地址:http://www.cnblogs.com/jasongan/p/3870639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!