System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal()); //序数, 该对象是枚举类对象的第几个(从0开始)
//枚举类的静态方法
System.out.println(WeekDay.valueOf("SUN")); //有名称获取元素对象
System.out.println(Arrays.toString(WeekDay.values())); //以数组形式获取枚举类中所有的元素
}
//带有构造器的枚举类
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");}
}
//带有抽象方法的枚举类
public enum TrafficLamp {
RED(30){
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
import java.util.Arrays;
public class EnumTest {
public static void main(String[] args) {
WeekDay weekDay2 = WeekDay.SUN;
//枚举类对象的自带的方法
System.out.println(weekDay2); //枚举类实现了toString方法
System.out.println(weekDay2.name());
System.out.println(weekDay2.ordinal()); //序数, 该对象是枚举类对象的第几个(从0开始)
//枚举类的静态方法
System.out.println(WeekDay.valueOf("SUN")); //有名称获取元素对象
System.out.println(Arrays.toString(WeekDay.values())); //以数组形式获取枚举类中所有的元素
}
//带有构造器的枚举类
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");}
}
//带有抽象方法的枚举类
public enum TrafficLamp {
RED(30){
public TrafficLamp nextLamp()
{
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp()
{
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp()
{
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time = time;}
}
}
4. 枚举的其他知识点:
枚举类的元素列表必须放在类代码的第一行, 且如果只有这一行的话行尾的分号可以省略.
枚举类的构造方法必须必须私有.
* 元素列表中的元素, 相当于是所属枚举类的子类.
* 如果枚举只有一个成员时, 就可以作为一种单例的实现方式.
反射
5.** Java程序中的各个Java类属于同一个类事物, 描述这类事物的Java类就是java.lang.Class类. Class类的实例对象对应各个类在内存中的字节码.
6. 如何获得各字节码对应的实例对象:
类名.class;
对象名.getClass();
Class.forName("类的完整名称"); * 需要带上包名! 做反射时主要用这种.
7. 九个预定义的Class实例对象.
即: 八种基本类型(boolean, byte, short, int, long, float, double, char)和void所对应的. 形如Integer.TYPE.
例如: Integer.TYPE和int.class一样, 都是int类型, 但是Integer.class却是java.lang.Integer类型.
8.** 反射定义: 反射就是把Java类中的各种成分映射成相应的Java类.
例如: 一个java类用一个Class类的对象来表, 一个类中的组成部分: 成员变量、方法、构造方法、包等信息也用一个个的java类来表示. 表示java类的Class类要提供一系列的方法, 用来获得其中变量(变量、方法、构造方法、包), 这些变量用相应的类的实例对象来表示, 如java.lang.reflect.Field,Method、Contrutor、Package等.
9. java.lang.reflect.Constructor类, 构造方法的反射应用:
[java]
import java.lang.reflect.Constructor;
class Test2
{
public static void main(String [] args) throws Exception
{
//反射获得接收StringBuffer的构造方法
Constructor cons