java 新特性 ----枚举(7)
来源:互联网 发布:e宠商城淘宝店 编辑:程序博客网 时间:2024/05/29 14:13
枚举
在有些情况下一个类的对象是有限而且固定的,例如季节类,他只有四个对象,正在如每星期的天数,他只有七天。这种实例有限而且固定的类,在java里面被称为枚举类。
1、使用简单程序完成枚举的功能:
代码:
package cn.com.zsc.day01;public class ColorTest { public static void main(String[] args) { Color c1 = Color.RED; //取得红色 System.out.println(c1.getName()); //输出名字 Color c2 = Color.getInstance(3); //根据编号取得名字 System.out.println(c2.getName()); //输出名字 }}class Color{ public static final Color RED = new Color("红色"); //定义第一个对象 public static final Color GREEN = new Color("绿色"); //定义第二个对象 public static final Color BLUE = new Color("蓝色"); //定义第三个对象 private String name ; private Color(String name){ //构造方法私有化,同时设置颜色的名称 this.setName(name); //为颜色名字赋值 } public String getName() { //取得颜色名字 return name; } public void setName(String name) { //设置颜色名字 this.name = name; } public static Color getInstance(int i){ //得到一个颜色,只能从固定的几个颜色中获得 switch(i){ case 1:{ return RED ; //返回红色 } case 2:{ return GREEN ; //返回绿色 } case 3:{ return BLUE ; //返回蓝色 } default:{ return null ; } } }}运行结果:
红色蓝色
以上程序将Color 类中的构造方法私有了,之后在类中准备了若干个实例化对象,以后要取得Color 类的实例则只能用RED,GREEN,BLUE三个对象,这样就有效的控制了对象的取得范围。
2、定义一个枚举类:
声明枚举类型:
[public] enum 枚举类型名称{
枚举对象 1,枚举对象 2,...,枚举对象 n;
}
定义一个Colors 的枚举类型:
package cn.com.zsc.day01;
public enum Colors {
RED,GREEN,BLUE;
}
使用switch 进行判断输出颜色:
代码:
package cn.com.zsc.day01;public class SwitchPointColor { public static void main(String[] args) { for(Colors c:Colors.values()){ print(c); } } private static void print(Colors colors) { switch(colors){ case RED:{ System.out.println("红颜色"); break ; } case GREEN:{ System.out.println("绿颜色"); break ; } case BLUE:{ System.out.println("蓝颜色"); break ; } } }}
运行结果:
红颜色绿颜色蓝颜色
上面的 Colors.values() 方法表示取得枚举类中的全部内容,返回的是一个数组对象,这是枚举类的本身支持的一个方法。
3.1、取得枚举的信息
在Enum 类的构造方法中的第一个参数name 就是定义的枚举的名称,第二个参数 ordinal 则会从 0 开始依次进行编号。之后可以使用Enum 提供的name() 和ordinal() 方法获取名称和编号。
代码:
package cn.com.zsc.day01;public class GetEnumInfo { public static void main(String[] args) { for(Colors color:Colors.values()){ System.out.println(color.ordinal()+"---->"+color.name()); } }}
运行结果:
0---->RED1---->GREEN2---->BLUE
3.2 、为每一个枚举对象赋值:
3.2.1 、通过构造方法为属性赋值:
每个枚举类中都有其指定好的若干对象,当然每一个枚举类对象中也可以包含多个属性。而这些属性也可以通过构造方法为其赋值。
通过构造方法为枚举元素赋值:
代码:
package cn.com.zsc.day01;public class ConstructorEnum { public static void main(String args[]) { for(Colorful c:Colorful.values()){ System.out.println(c.ordinal()+"--->"+c.name()+"("+c.getName()+")"); } }}enum Colorful{ RED("红色"),GREEN("绿色"),BLUE("蓝色"); private Colorful(String name){ this.setName(name); } private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; }}
运行结果:
0--->RED(红色)1--->GREEN(绿色)2--->BLUE(蓝色)
3.2.2 、 通过settet 方法为属性赋值
使用setName() 设置内容:
代码:
package cn.com.zsc.day01;public class SetEnum { public static void main(String[] args) { Colorfuls c = Colorfuls.BLUE; c.setName("兰色"); c.setName("蓝色"); System.out.println(c.getName()); }}enum Colorfuls{ RED,BLUE,GREEN; private String name ; public String getName() { return name; } public void setName(String name) { switch(this){ case RED:{ if("红色".equals(name)){ this.name = name ; }else{ System.out.println("内容错误"); } break ; } case GREEN:{ if("绿色".equals(name)){ this.name = name ; }else{ System.out.println("内容错误"); } break ; } case BLUE:{ if("蓝色".equals(name)){ this.name = name ; }else{ System.out.println("内容错误"); } break ; } } }}
运行结果:
内容错误蓝色
3.3 、使用比较器:
在Enum 类的定义中已经实现好了Comparable 接口,所以枚举类的内容本身是可以进行排序的。
验证枚举比较器:
代码:
package cn.com.zsc.day01;import java.util.Iterator;import java.util.Set;import java.util.TreeSet;public class ComparableEnum { public static void main(String[] args) { Set<Colorf> ts = new TreeSet<Colorf>(); ts.add(Colorf.GREEN); ts.add(Colorf.BLUE); ts.add(Colorf.RED); Iterator<Colorf> iter = ts.iterator(); while(iter.hasNext()){ System.out.println(iter.next()); } }}enum Colorf{ RED,BLUE,GREEN;}
运行结果:
REDBLUEGREEN
4、类对枚举的支持————EnumMap、EnumSet
4.1、EnumMap
EnumMap是Map 接口的子类,所以本身还是以Map 的形式进行操作的,即"kek--->value"。如果要使用EnumMap 则首先要创建EnumMap 对象,在创建对象时必须指定要操作的枚举类,构造方法如下:
public EnumMap(Class<K> kryType)
验证EnumMap
代码:
package cn.com.zsc.day01;import java.util.EnumMap;import java.util.Map;public class EnumMapTest { public static void main(String[] args) { Map<Co,String> desc = null ; desc = new EnumMap<Co,String>(Co.class); desc.put(Co.RED, "红色"); desc.put(Co.BLUE, "蓝色"); desc.put(Co.GREEN, "绿色"); System.out.println("====输出全部内容===="); for(Co c:Co.values()){ System.out.println(c.name()+"-->"+desc.get(c)); } System.out.println("====输出全部的键值===="); for(Co c:desc.keySet()){ System.out.print(c.name()+"、"); } System.out.println("====输出全部内容===="); for(String s:desc.values()){ System.out.print(s+"、"); } }}enum Co{ RED,BLUE,GREEN;}
运行结果:
====输出全部内容====RED-->红色BLUE-->蓝色GREEN-->绿色====输出全部的键值====RED、BLUE、GREEN、====输出全部内容====红色、蓝色、绿色、
4.2、EnumSet
EnumSet是Set 接口的子类,所以里面的内容是无法重复的。使用EnumSet 时不能直接使用关键字new 为其进行实例化,而是使用本类中提供的静态方法。
验证EnumSet -----将全部的集合设置到EnumSet 集合中
代码:
package cn.com.zsc.day01;import java.util.EnumSet;public class EnumSetTest { public static void main(String[] args) { EnumSet<Col> es = null ; es = EnumSet.allOf(Col.class); print(es); } private static void print(EnumSet<Col> es) { for(Col c:es){ System.out.print(c+"、"); } System.out.println(); }}enum Col{ RED,BLUE,GREEN;}
运行结果:
RED、BLUE、GREEN、
5、让枚举类实现一个接口
枚举类也可以实现一个接口,但是因为接口会存在抽象方法,所以枚举类中的每个对象都必须实现接口中的抽象方法。
让枚举类实现一个接口:
代码:
package cn.com.zsc.day01;interface Print{ public String getColo();}enum Colo implements Print{ RED{ public String getColo(){ return "红色"; } }, GREEN{ public String getColo(){ return "绿色"; } }, BLUE{ public String getColo(){ return "蓝色"; } };}public class InterfaceEnumTest { public static void main(String[] args) { for(Colo c:Colo.values()){ System.out.print(c.getColo()+"、"); } }}
运行结果:
红色、绿色、蓝色、
以上程序在接口中定义了一个getColo()方法,枚举类在实现此接口之后,就必须对枚举类中的每个对象分别实现其接口中的getColo()方法。
6、在枚举类中定义抽象方法
枚举类除了可以实现接口外,还可以在枚举类中定义抽象方法,这样每个枚举类的对象只要实现了此抽象方法即可。
在枚举类中定义抽象方法:
代码:
package cn.com.zsc.day01;enum clo{ RED{ public String getColo(){ return "红色"; } }, GREEN{ public String getColo(){ return "绿色"; } }, BLUE{ public String getColo(){ return "蓝色"; } }; public abstract String getColo();}public class AbstractMethodEnum { public static void main(String[] args) { for(Colo c:Colo.values()){ System.out.print(c.getColo()+"、"); } }}
运行结果:
红色、绿色、蓝色、
- java 新特性 ----枚举(7)
- JAVA新特性(枚举)
- java新特性-枚举
- java新特性—枚举
- java 7 新特性/switch/枚举类型/二进制/字面量
- <黑马程序员>枚举--(java基础加强1.5新特性)
- Java中的(JDK5新特性)枚举10
- java 之新特性--枚举(JDK5出现的)
- Java高新技术新特性之枚举
- Java--枚举(Enum)JDK1.5新特性
- J2SE 5.0新特性(一)枚举
- J2SE 5.0新特性(一)枚举
- 枚举新特性
- [Java5新特性]枚举
- Java 7 新特性
- Java 7 新特性
- Java 7 新特性
- Java 7 新特性
- PHP获取当前文件路径,上层目录路径
- java 输入/输出 IO流(4)
- 谈密码的管理方法
- 浅析 java5 新特性(5)
- java 新 IO(6)
- java 新特性 ----枚举(7)
- java 新特性 ----Annontation (8)
- checkGuard class
- 交通灯管理系统(9)
- 银行业务调度系统(10)
- asp判断字符串包含的函数——InStr函数
- Mac系统关于文件夹显示
- qt 信号槽的执行流程
- 读《Boost程序库完全开发指南》