---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
枚举
在Java中作为一种特别的类型存在。它是一种储存常量的数据集合,在创建其子类对象时只能创建里面定义的常量。枚举里的成员必须定义为常量,本质上是抽象的父类,而我们创建的对象就是其子类。
枚举是java1.5之后的新特性,之前的版本如果要实现这种机制,就必须用到大量的判断语句。
枚举类型的类中元素列表必须写在程序的第一行,构造方法必须是private型的,枚举元素都是static的,而静态变量在编译时就会初始化,就会调用构造方法;
枚举只有一个成员时,就可以作为一种单例的实现方式;
Enum类的常用方法:
String name():返回该枚举常量的String类型的名字;
String toString():返回枚举常量的String类型的名字;
int ordinal():返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零);
static <T extends Enum<T>>T valueOf(Stringname):返回带指定名字的枚举常量;
比如一个星期有7天,这7个类都是固定不变的。所以构造星期的枚举,它有7个常量成员。
- public enum WeekDay
- {
- SUN,MON,TUE,WED,THU,FRI,SAT; ;
- }
再如交通灯的例子,交通灯有三种状态,分别为红、绿和黄。每种状态之间的转换有特定的规律,每种状态都有特定的持续时间。
- public enum TrafficLamp
- {
- RED(40) //成员必须写在最前面,创建时会按顺序实例化
- {
- public TrafficLamp nextLamp()
- {
- return GREEN;
- }
- },
- GREEN(60)
- {
- public TrafficLamp nextLamp()
- {
- return YELLOW;
- }
- },
- YELLOW(5)
- {
- public TrafficLamp nextLamp()
- {
- return RED;
- }
- };
- private int time;
- private TrafficLamp(int time) //带有构造方法
- {
- this.time = time;
- }
- public abstract TrafficLamp nextLamp(); //有抽象方法,成员一定要复写它
实例化:TrafficLamp lamp=TrafficLamp.YELLOW; . 这时lamp就是YELLOW的实例化对象,它可以调用YELLOW里的构造方法。而且在创建对象时只能创建三种状态中的一种,担高了程序的安全性。当元素只有一个,可以实现单例设计模式,都是为了安全出发的。
反射
反射在Java1.2出现。它的基石就是Class类。
Java程序中有各种不同的类,各种类的抽象就是类。
每个对象都属于一种JAVA类,使用.getClass()可以获取。
第一个Java类都有自己的字节码。
获取类的各个字节码的三种方法
1.类名.class,例如System.class
2.对象.getClass
3.Class.forName(“类名”) 反射中这种方法较常用,因为写程序时往往还不知道所要调用的类,类名可以后期通过参数的方法传进来。
每一个类都有共性的成分,如Constructor,Field,Method.有构造参数的类还有ParameterType(可使用这个获得泛型中的实际参数)。
获得这个类的字节码之后,就可以使用Class类中的方法,如getConstructor,getField,getMethod得到这个类的成分。最后再使用这些成分中的方法得到这个类的构造和成员信息。
Constructor的反射应用
Constructor constructor = String.class.getConstructor(StringBuffer.class)
String是一个类,它有很多种构造方法,StringBuffer是其中一种的参数,这里就通过反射的方法获得了这种特定的构造方法。然后可以通过下面的方法实例化和应用。
constructor.newInstance(new StringBuffer("Hello"))
这就创建了一个String的实例化对象,它的参数是StringBuffer对象。
同理,其它成分的获取大同小异,只是方法调用上有所不同。最主要是把思想理解了。
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------