使用简单程序完成枚举的功能
使用简单的类实现枚举操作
01.class Color{ 02.public static final Color RED = new Color("红色") ;//定义第一个对象 03.public static final Color GREEN = new Color("绿色") ;//定义第二个对象 04.public static final Color BLUE = new Color("蓝色") ;//定义第三个对象 05.private String name ; 06.private Color(String name){ //构造方法私有化,同时设置颜色的名称 07. this.setName(name) ; //为颜色的名字赋值 08.} 09.public String getName() { //取得颜色名称 10. return this.name; 11.} 12.public void setName(String name) { //设置颜色名称 13. this.name = name; 14.} 15. 16.public static Color getInstance(int i){ //得到一个颜色,只能从固定的几个颜色中取得 17. 18. switch (i){ 19. case 1 :{ //返回红色对象 20. return RED ; 21. } 22. case 2 :{ //返回绿色对象 23. return GREEN ; 24. } 25. case 3 :{ //返回蓝色对象 26. return BLUE ; 27. } 28. default:{ //错误的值 29. return null ; 30. } 31. } 32.} 33. 34.} 35. 36.public class ColorDemo { 37.public static void main(String args[]){ 38. Color c1 = Color.RED ; //取得红色 39. System.out.println(c1.getName());//输出名字 40. Color c2 = Color.getInstance(3) ;//根据编号取得名字 41. System.out.println(c2.getName());//输出名字 42.} 43.} 程序将Color类中的构造方法私有,之后在类中准备了若干个实例化对象,以后如果要取得 Color类的实例,则只能从RED、GREEN、BLUE3个对象中取得,这样就有效地限制了对象 的 取得范围。 以上使用的Color对象指定的范围,是通过一个个常量对每个对象进行编号的。也就是说, 一个个的对象就相当于用常量表示了,所以,按照这个思路也可以直接使用一个接口规定 出一组常量的范围。
使用接口表示一组范围 01.public interface Color{ 02.public static final int RED = 1 ; //表示红色 03.public static final int GREEN = 2 ; //表示绿色 04.public static final int BLUE = 3 ; //表示蓝色 05.} 以上表示出的各个颜色是通过接口指定好的常量范围,与之前相比更加简单。但是这样做也会 存在另外一个问题,如果现在使用如下的代码: 01.public class ColorDemo{ 02.public static void main(String args[]){ 03. System.out.println(Color.RED + Color.GREEN) ; //颜色相加 04.} 05.} 两个颜色的常量相加后形成“3”,这样的结果看起来会令人很困惑,操作很不明确。
定义一个枚举类型 01.//定义一个Color的枚举类型 02. 03.public enum Color{ //定义枚举类型 04.RED,GREEN,BLUE ; //定义枚举的3个类型 05.} 以上的Color定义出来的枚举类型,其中包含RED,GREEN,BLUE3个数据。可以使用“枚举.variable”的形式 取出枚举中的指定内容。 01.//取出一个枚举的内容 02. 03.public class GetEnumContent { 04.public static void main(String args[]){ 05. Color c = Color.BLUE ; //取出蓝色 06. System.out.println(c); //输出信息 07.} 08.} 枚举类型的数据也可以使用“枚举.values()”的形式,将全部的枚举类型变为对象数组的形式,之后直接使用foreach进行输出。 01.//使用foreach输出枚举内容 02. 03.public class PrintDemo { 04.public static void main(String args[]){ 05. for(Color c : Color.values()){ //枚举.values()表示得到 全部枚举的内容 06. System.out.println(c); 07. } 08.} 09.} 枚举中的每个 类型也可以使用switch进行判断,但在switch语句中使用枚举类型时,一定 不能在每一个枚举类型值的前面加上枚举类型的类名(如Color.BlUE),否则编译器将会报错。 01.//使用switch进行判断 02. 03.public class SwitchPrintDemo { 04.public static void main(String args[]){ 05. for(Color c : Color.values()){ //枚举.values()表示得到 全部枚举的内容 06. print(c); 07. } 08.} 09. 10.public static void print(Color color){ 11. switch(color){ //判断每个颜色 12. case RED:{ //直接判断枚举内容 13. System.out.println("红颜色"); 14. break ; 15. } 16. case GREEN:{ //直接判断枚举内容 17. System.out.println("绿颜色"); 18. break ; 19. } 20. case BLUE:{ //直接判断枚举内容 21. System.out.println("蓝颜色"); 22. break ; 23. } 24. default :{ //未知内容 25. System.out.println("未知颜色"); 26. break ; 27. } 28. } 29.} 30.} 上面的Color.values()方法表示取得枚举中的全部内容,返回的是一个对象数组,这是枚举本身支持的一个方法。