黑马程序员_基础加强(2) 枚举
2013-03-18 00:03
337 查看
------- android培训、java培训、期待与您交流!
----------
每个元素分别用一个公有的静态成员变量来表示。
可以有若干公有方法或抽象方法
eg:
eg:
switch语句中的枚举
eg:
通过一个接口或多个接口创建枚举:
eg
eg:
eg:
eg:
EnumMap 用法
eg:
------- android培训、java培训、期待与您交流!
----------
----------
一.普通类实现枚举
私有构造方法。每个元素分别用一个公有的静态成员变量来表示。
可以有若干公有方法或抽象方法
eg:
public abstract class WeekDay1{ private WeekDay1(){} public final static WeekDay1 SUN = new WeekDay1(){ //采用抽象方法就是将if else语句转移一个个独立的类 public WeekDay1 nextDay() { return MON; } }; public final static WeekDay1 MON = new WeekDay1(){ public WeekDay1 nextDay() { return TUES; } }; public final static WeekDay1 TUES = new WeekDay1(){ public WeekDay1 nextDay() { return WES; } }; public final static WeekDay1 WES = new WeekDay1(){ public WeekDay1 nextDay() { return THUR; } }; public final static WeekDay1 THUR = new WeekDay1(){ public WeekDay1 nextDay() { return FRI; } }; public final static WeekDay1 FRI = new WeekDay1(){ public WeekDay1 nextDay() { return SAT; } }; public final static WeekDay1 SAT = new WeekDay1(){ public WeekDay1 nextDay() { return SUN; } }; public abstract WeekDay1 nextDay(); public String toString() { if(this == MON){ return "MON"; }else if(this == TUES){ return "TUES"; }else if(this == WES){ return "WES"; }else if(this == THUR){ return "THUR"; }else if(this == FRI){ return "FRI"; }else if(this == SAT){ return "SAT"; }else{ return "SUN"; } } }枚举的应用:
eg:
public enum TrafficLamp{ //下边的一个代码,可以看出TrafficLamp子类 的一个对象,对象名是RED,子类名未知。 RED(30){ public TrafficLamp nextLamp(){ return GREEN; } }, GREEN(45){ public TrafficLamp nextLamp(){ return YELLOW; } }, YELLOW(15){ public TrafficLamp nextLamp(){ return RED; } }; public abstract TrafficLamp nextLamp(); @SuppressWarnings("unused") private int time; private TrafficLamp(int time){this.time =time;} }
二.枚举的用法
静态的枚举引用switch语句中的枚举
eg:
enum Traffic { GREEN, YELLOW, RED, } class TrafficLight{ Traffic color = Traffic.RED; public void changeLight(){ switch(color){ case RED: color=Traffic.GREEN; break; case GREEN: color=Traffic.YELLOW; break; case YELLOW: color=Traffic.RED; break; } } public String toString(){ return "the Traffic light is "+color; } public static void main(String[] args) throws InterruptedException{ TrafficLight trafficLight = new TrafficLight(); while(true){ System.out.println(trafficLight); Thread.sleep(2*1000); trafficLight.changeLight(); } } }
通过一个接口或多个接口创建枚举:
eg
package com.java; import java.util.Random; interface Generators<T>{ public T next(); } enum EnumElement implements Generators<EnumElement>{ A,B,C,D,E; private Random random = new Random(47); @Override public EnumElement next() { return values()[random.nextInt(values().length)]; } } class EnumTest{ public static <T> void getElements(Generators<T> t){ System.out.println(t.next()); } public static void main(String[] args){ for(int i=0;i<EnumElement.values().length;i++) getElements(EnumElement.A); } }枚举随机抽取
eg:
package com.java; import java.util.*; public class Enums { private static Random rand = new Random(47); public static <T> T random(T[] values){ return values[rand.nextInt(values.length)]; } public static <T extends Enum<T>> T random(Class<T> enumClass){ return random(enumClass.getEnumConstants()); } public static void toB(long number){ if(number>>>1!=0) toB(number>>>1); System.out.print(number & 1); } public static void main(String[] args){ toB(10); System.out.println(5.0942*1000); System.out.println(5.0943f*1000); System.out.println(5.0944f*1000); } }接口组织多个枚举
package com.java; /** * 接口组织枚举,对枚举进行扩展 * @author Administrator * */ public interface Food { enum Appetizer implements Food{ SALAD,SOUP,SPRING_ROLLS; } enum Maincourse implements Food{ LASAGNE, BURRITO, PAD_THAI,LENTILS, HUMMOUS, VINDALOO; } enum Dessert implements Food{ TIRAMISU, GELATO, BLACK_FOREST_CAKE,FRUIT, CREME_CARAMEL; } enum Coffee implements Food{ BLACK_COFFEE, DECAF_COFFEE, ESPRESSO,LATTE, CAPPUCCINO, TEA, HERB_TEA; } }枚举定义接口的实现
package com.java; import com.java.Food.Appetizer; import com.java.Food.Maincourse; public class TypeOfFood { public static void main(String[] args) { Food food = Appetizer.SALAD; food = Maincourse.HUMMOUS; System.out.println(food); } }枚举里存放枚举实例
package com.java; import java.lang.reflect.InvocationTargetException; @SuppressWarnings("unused") public enum Course { APPETIZERD(Food.Appetizer.class), MAINCOURSE(Food.Maincourse.class), DESSERT(Food.Dessert.class), COFFEE(Food.Coffee.class); private Food[] values; private Course(Class<? extends Food> foodClass){ values=foodClass.getEnumConstants(); } public Food randomSelection(){ return Enums.random(values); } public String toString(){ return Enums.random(values).toString(); } public static void main(String[] args){ for(int i=0;i<Course.values().length;i++){ for(Course course : Course.values()){ Food food = course.randomSelection(); System.out.println(food); } System.out.println("---------"); } /* Course course = Course.APPETIZERD; while(true){ try { Food food = (Food) Course.class.getMethod("randomSelection").invoke(course); System.out.println(food); } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } */ } }加紧奏的实现方法
eg:
package com.java; enum SecurityCategory{ STOCK(Security.Stock.class),BOND(Security.Bond.class); private Security[] values; private SecurityCategory(Class<? extends Security> enumClass){ values = enumClass.getEnumConstants(); } interface Security{ enum Stock implements Security{ SHORT,LONG,MARGIN; } enum Bond implements Security{ MUNICIPAL,JUNK; } } public Security randomSelection(){ return Enums.random(values); } public static void main(String[] args) throws InterruptedException{ /* while(true){ Thread.sleep(5000); for(SecurityCategory securityCategory : SecurityCategory.values()){ Security security = securityCategory.randomSelection(); System.out.println(security.toString()); } System.out.println("-------------------"); } */ for(int i=0;i<10;i++){ SecurityCategory category = Enums.random(SecurityCategory.class); System.out.println(category+":"+category.randomSelection()); } } }JDK1.5提供了EnumSet 用法
eg:
package com.java; public enum AlarmPoints { STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3,OFFICE4, BATHROOM, UTILITY, KITCHEN }
package com.java; import static com.java.AlarmPoints.*; import java.util.*; public class EnumSets { public static void main(String[] args) { EnumSet<AlarmPoints> points = EnumSet.noneOf(AlarmPoints.class); points.add(BATHROOM); System.out.println(points); points.addAll(EnumSet.of(STAIR1,STAIR2,KITCHEN)); System.out.println(points); points = EnumSet.allOf(AlarmPoints.class); points.removeAll(EnumSet.of(STAIR1,STAIR2,KITCHEN)); System.out.println(points); points.removeAll(EnumSet.range(OFFICE1,OFFICE4)); System.out.println(points); points=EnumSet.complementOf(points); System.out.println(points); } }
EnumMap 用法
eg:
package com.java; import java.util.*; import java.util.Map.Entry; public class EnumMaps { interface Command { void action(); } enum AlarmPoint { STAIR1, STAIR2, LOBBY, OFFICE1, OFFICE2, OFFICE3,OFFICE4, BATHROOM, UTILITY, KITCHEN } public static void main(String[] args){ EnumMap<AlarmPoint,Command> en = new EnumMap<AlarmPoint,Command>(AlarmPoint.class); en.put(AlarmPoint.KITCHEN,new Command(){ public void action(){ System.out.println("Kithchen fire!"); } }); en.put(AlarmPoint.BATHROOM,new Command(){ public void action(){ System.out.println("Bathroot alert!"); } }); for(Map.Entry<AlarmPoint,Command> element : en.entrySet()){ System.out.print(element.getKey()+"---->"); element.getValue().action(); } } }
------- android培训、java培训、期待与您交流!
----------
相关文章推荐
- 黑马程序员_java基础加强_枚举
- 黑马程序员--Java基础加强--07枚举、反射、注释
- 黑马程序员_Java基础加强_枚举
- 黑马程序员_基础加强_枚举
- 黑马程序员_java基础加强_静态导入_反射_枚举_注解_内省_泛型_代理
- 黑马程序员-基础加强-IDE&新特性&枚举-No.06
- 黑马程序员--Java基础加强学习笔记之重载和覆写、可变参数、枚举
- 黑马程序员:基础加强(可变参数、增强for、枚举、javabBean、BeanUtils、注解、泛型)
- 黑马程序员 Java基础加强 枚举
- 黑马程序员——><基础加强一(eclipse-静态导入-享元设计模式-自动拆装箱-枚举-反射-类加载器)>
- 黑马程序员-------(基础加强)枚举
- 黑马程序员_java_基础加强_静态导入_反射_枚举_注解_内省_泛型
- 黑马程序员: 基础加强之静态导入,可变参数,增强for,自动装箱,享元模式,枚举
- 黑马程序员--Java基础加强--01.枚举常量被使用的时候的内存图
- 黑马程序员—Java基础加强—(枚举)
- 黑马程序员基础加强——JDK1.5的新特性: 自动拆箱和机制 枚举
- 黑马程序员-基础加强-枚举
- 黑马程序员-Java基础加强之枚举
- 黑马程序员——java基础加强之枚举
- 黑马程序员-JAVA基础加强-枚举