zoukankan      html  css  js  c++  java
  • 基础加强____JDK1.5高新特性之__【枚举】


    JDK1.5版本出现的高级特性 Enumeration

    枚举 Enumeration "1.5新特性"
    概念:
    	枚举就是要让某个类型的变量取值只能为若干个固定值中的一个,否则编译器就会报错。
    	枚举可以让编译器在编译时就可以控制程序中填写的非法值;而普通变量的方式在开发阶段无法实现这一目标。
    WeekDay模拟枚举的步骤:
    	1,私有化构造方法
    	2,每个元素分别用一个公有的静态成员变量表示
    	3,可以有若干共有方法或抽象方法
    定义enum枚举
    	枚举是一种特殊的类,每个元素都是该类的一个实例对象
    	枚举相当于一个类,其中可以定义构造方法、成员变量、普通方法和抽象方法。
    	枚举元素必须位于枚举体中最开始部分,枚举列表末尾要有";"与其他成员分隔。
    	枚举格式:枚举元素必须位于枚举最开始部分
    
    带有构造方法的枚举(WeekDay)
    	构造方法必须为私有,如果有多个构造方法,调用由参数列表决定
    	枚举元素MON与MON()效果一样,都是调用默认的构造方法
    带有抽象方法的枚举(TrafficLamp)
    	定义枚举列表
    	元素实现枚举中抽象方法nextLamp,每个元素都是枚举的子类生成的实例对象,以内部类的形式定义
    
    从枚举中编程思想的提升
    	类的方法返回值类型可以是其本身
    	类中可以定义静态常量,该常量数据类型可以是该类的实例对象
    	
    枚举类
    
    	使用enum声明,默认直接继承了java.lang.Enum类,而不是Object类;
    	枚举类的对象是固定的,实例个数有限,不可以再new,枚举对象后可以跟()。
    	枚举元素必须位于枚举类体中的最开始部分,枚举元素后要有分号与其他成员分隔。
    	枚举类的构造方法的权限修饰符默认是private;
    	一旦枚举对象后面加上{},那么该对象实际是枚举匿名内部类对象;
    	所有枚举类都提供一个静态的values()方法(返回该枚举类所有对象组成的数组),便于遍历所有枚举对象;
    	所有枚举类都提供一个静态的valueOf(String name)方法, 返回枚举类中对象名等于 name的对象。
    
    	若枚举中只有一个成员,就可以作为一种"单例"的实现方式		
      枚举不可以new();即便是反射也不可以!
    	所以枚举型单例模式有着比普通单例有着更高的安全性
    
    
    ======================================================================================
    

    枚举示例:

    package itheima.enhance;
    
    public class EnumeTest {
    
    	/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		WeekDay weekDay = WeekDay.SUN;
    		System.out.println(weekDay.nextDay());
    		
    		WeekDay1 weekDay2 = WeekDay1.FRI;
    		System.out.println(weekDay2);
    		System.out.println(weekDay2.ordinal());//在枚举中所处的位置
    		System.out.println(WeekDay1.valueOf("SUN").toString());//静态方法
    		System.out.println(WeekDay1.values().length);//静态方法:枚举数组长度
    	}
    	
    	public enum WeekDay1{	//定义带有构造方法的枚举
    		//1,元素列表必须放在最前,否则编译报错,枚举列表后面有操作的话要加上“;”
    		//2,枚举的构造方法必须定义成私有,一般方法无此限制
    		SUN(1),MON,TUE,WED,THU,FRI,SAT;//元素是静态的,初始化时会调用构造方法(7次)
    		private WeekDay1(){System.out.println("1");}
    		private WeekDay1(int day){System.out.println("222");}//两个构造法方法,空/实参
    	}
    	
    	public enum TrafficLamp{	//带有抽象方法的枚举
    		RED(30){
    			public TrafficLamp nextLamp(){//实现抽象方法
    				return GREEN;
    			}
    		},
    		GREEN(40){
    			public TrafficLamp nextLamp(){
    				return YELLOW;
    			}				
    		},
    		YELLOW(10){
    			public TrafficLamp nextLamp(){
    				return RED;
    			}				
    		};
    		public abstract TrafficLamp nextLamp();//抽象方法
    		private int time;
    		private TrafficLamp(int time){this.time=time;}//有参de构造方法
    		
    	}
    }




  • 相关阅读:
    「LibreOJ β Round #4」子集
    「LibreOJ β Round #4」框架
    「LibreOJ β Round #4」游戏
    [HNOI2008]GT考试
    [HNOI2008]水平可见直线
    UVA 1650 Number String
    [USACO14JAN]Recording the Moolympics
    UVA 1390 Interconnect
    UVA 12520 Square Garden
    [HNOI2008]神奇的国度
  • 原文地址:https://www.cnblogs.com/Joure/p/4337193.html
Copyright © 2011-2022 走看看