黑马程序员--枚举
2013-11-20 21:23
330 查看
--------------android培训、java培训、学习型技术博客、期待与您交流!
--------------
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时候就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这个目标。
普通类模拟枚举的实现原理
枚举基本应用
枚举的高级应用
1、枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
2、枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
3、带构造方法的枚举
1)构造方法必须定义成私有的
2)如果有多个构造方法,该如何选择哪个构造方法?
3)枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
4、带方法的枚举
用…这三个点表示,且这三个点位于变量类型和变量名之间,前后有无空格皆可。
可变参数其实就是数组参数的简写形式。不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。隐式将这些参数封装成了数组。
在使用时注意:可变参数一定要定义在参数列表的最后面。
--------------
枚举
作用:当要定义星期几或性别的变量,该怎么定义。假设用1-7分别表示星期一到星期日,但有人可能会写成int weekday=0;枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时候就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这个目标。
普通类模拟枚举的实现原理
/* * 用普通类如何实现枚举功能,定义一个Weekday的类来模拟枚举功能。 1、私有的构造方法 2、每个元素分别用一个公有的静态成员变量表示 3、可以有若干公有方法或抽象方法。采用抽象方法定义nextDay就将大量的if.else语句转移成了一个个独立的类。 */ public class WeekDay { //Step1. 私有化构造方法 private WeekDay(){} //Step2. 每一个元素为全局常量,public static final ----枚举中的常量元素 public static final WeekDay MON =new WeekDay(); public static final WeekDay SUN =new WeekDay(); //Step3. 自定义的若干方法 public WeekDay nextDay(){ if(this == MON) //MON为枚举常量 return SUN; return MON; } /* 缺点:如果枚举常量值非常多的时候,这个方法中会存在大量的if...else if... else */ public String toString(){ return (this==SUN)? "SUN": "MON"; } }
枚举基本应用
public class EnumDemo { public static void main(String[] args) { WeekDay weekDay=WeekDay.MON; System.out.println(weekDay); //输出枚举常量名 System.out.println(weekDay.name()); //输出对象名 System.out.println(weekDay.getClass()); //输出对应类 System.out.println(weekDay.toString()); //输出枚举对象名 System.out.println(weekDay.ordinal()); //输出此对象在枚举常量的次序 System.out.println(WeekDay.valueOf("WED")); //将字符串转化为枚举常量 System.out.println(WeekDay.values().length); //获取所以的枚举元素,并打印其长度 } //定义枚举内部类 public enum WeekDay{ SUN(1),MON,TUE,WED,THI,FRI,SAT;//分号可有可无,但如果下面还有方法或其他成员时,分号不能省。 //而且当有其他方法时,必须在这些枚举变量的下方。 //无参构造器 private WeekDay(){ System.out.println("First"); } //带参数的构造器 private WeekDay(int day){ System.out.println("Second"); } } }
枚举的高级应用
1、枚举就相当于一个类,其中也可以定义构造方法、成员变量、普通方法和抽象方法。
2、枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。
3、带构造方法的枚举
1)构造方法必须定义成私有的
2)如果有多个构造方法,该如何选择哪个构造方法?
3)枚举元素MON和MON()的效果一样,都是调用默认的构造方法。
4、带方法的枚举
/* * 抽象的枚举方法 * 此时枚举中的常量需要子类来实现,这是可以利用内部类的方式来定义枚举常量 * 带方法的枚举 1)定义枚举TrafficLamp 2)实现普通的next方法 3)实现抽象的next方法:每个元素分别是由枚举类的子类来生成的实例对象,这些子类 4)用类似内部类的方式进行定义。 5)增加上表示时间的构造方法 * */ public class Enum { public static void main(String[] args) { WeekDay day = WeekDay.MON; System.out.println(day.nextDay()); } public enum Demo { // 元素列表必须位于所有的成分之前。每个元素都是一个类。 SUN, MON, TUE, WED, THI, FRI, SAT; // 对于枚举的构造方法只能是私有的。 // 元素列表中没有写任何参数时候,默认调用无参构造。 // 如果想调用带参构造,需要加入参数。例:SUN(1); private Demo() { } private Demo(int day) { } } public enum TrafficLamp{ // new子类的实例对象,调用父类的有参构造方法。 RED(30){ @Override public TrafficLamp nextLamp() { return GREEN; } }, GREEN(40){ @Override public TrafficLamp nextLamp() { return YELLOW; } }, YELLOW(5){ @Override public TrafficLamp nextLamp() { return RED; } }; // 定义一个抽象方法。方法的返回类型可以是类本身。 public abstract TrafficLamp nextLamp(); private int time ; private TrafficLamp(int time){ this.time = time; } } // 枚举只有一个成员时候,就可以作为一种单例的实现方式。 }
可变参数
如果一个方法在参数列表中传入多个参数,个数不确定,那么每次都要复写该方法。这时可以用数组作为形式参数。但是在传入时,每次都需要定义一个数组对象,作为实际参数。在JDK1.5版本后,就提供了一个新特性:可变参数。用…这三个点表示,且这三个点位于变量类型和变量名之间,前后有无空格皆可。
可变参数其实就是数组参数的简写形式。不用每一次都手动的建立数组对象。只要将要操作的元素作为参数传递即可。隐式将这些参数封装成了数组。
在使用时注意:可变参数一定要定义在参数列表的最后面。
public class Test { public static void main(String[] args) { //现将2,3存入数组,再将数组传入要调用的方法 System.out.println(add(2,3)); //现将2,3,5存入数组,再将数组传入要调用的方法 System.out.println(add(2,3,5)); } //采用可变参数的形式来改进代码 private static int add(int ... args) { int sum =0; for(int i=0; i< args.length; i++)//以数组的形式来操作可变参数 sum+=args[i]; return sum; } }
相关文章推荐
- 黑马程序员_java基础加强-枚举和反射
- 黑马程序员--枚举与反射
- 黑马程序员_Java高新技术(静态导入、可变参数、增强for循环、自动拆装箱、枚举、反射)
- 黑马程序员_C语言基础_构造类型(数组,结构体,枚举)
- 黑马程序员—枚举、结构、常量日志总结
- 黑马程序员_枚举
- 黑马程序员_枚举
- 黑马程序员——java基础加强之枚举
- 黑马程序员_枚举小结
- 黑马程序员_分支结构、枚举、结构、数组
- 黑马程序员_java高新枚举与反射
- 黑马程序员-----程序员之路_____JDK1.5新特性之枚举
- 黑马程序员 《ios零基础教程》--全局和局部变量、结构体、枚举 2014-4-2总结
- 黑马程序员---关于枚举的理解
- 黑马程序员_基础加强_枚举
- 黑马程序员_枚举与反射
- 黑马程序员_java高新技术总结【1】(枚举和部分java新特性)
- 黑马程序员_java高新技术--枚举
- 黑马程序员-枚举和注解
- 黑马程序员-枚举