/*!
* Java中的枚举类型也是类,
* Java中的类都隐含从Object
* 派生,Java中的枚举类型都
* 隐含从Enum类派生
* Java的枚举类型一般都是全部大写
*
* SMALL,MEDIUM,LARGE..
* 都可以看成是其中一个枚举类型的
* 实例
*
* Java Class反射类型,得到类型对象Class
* 1.<classname>.class
* 2.Class.forName(<classname>)
* 3.<instance>.getClass()
*
* Java类型转换
* BaseClass bc = new DerivedClass();
* DerivedClass dc = (DerivedClass)bc;
* 更加健壮的做法:
* if(bc instanceof DerivedClass){
* Java中的类型转换相当于C++
* 中的dynamic_cast
* DerivedClass dc = (DerivedClass)bc;
* }
*/
enum Size{
/*!Java的枚举类型的值,相当于默认定义的
* 实例的值,并且建议该值放到class文件的最前面*/
SMALL,
MEDIUM,
LARGE,
EXTRA_LARGE;
}
enum Sex{
/*! 这里就需要构造函数来构造了*/
MALE("m"),
FEMALE("f");
/*!性别的缩写*/
private String abbr;
/*!要特别注意的是枚举类型的构造函数必须是private
* 是为了保证枚举类型的有限性
*/
private Sex(String abbr) {this.abbr = abbr;}
public String getAbbrevation() { return abbr;}
}
public class JavaEnums{
public static void main(String[] args){
//将枚举类型的实例toString 转换成字符串
System.out.println("Small=" + Size.SMALL.toString());
System.out.println("Medium=" + Size.MEDIUM.toString());
//将枚举类型的字符串通过Enum.valueOf转换成枚举类型
System.out.println("Small=" + Enum.valueOf(Size.class, "SMALL"));
System.out.println("Large=" + Enum.valueOf(Size.class, "LARGE"));
//将枚举类型直接定义成类类型的
System.out.println("Male=" + Sex.MALE.toString());
System.out.println("Female=" + Sex.FEMALE.toString());
System.out.println("Male(Abbr)=" + Sex.MALE.getAbbrevation());
System.out.println("Female(Abbr)=" + Sex.FEMALE.getAbbrevation());
//这里valueOf指定的是实例的名称
System.out.println("Male=" + Enum.valueOf(Sex.class, "MALE"));
System.out.println("Female=" + Enum.valueOf(Sex.class, "FEMALE"));
//遍历枚举类型中的所有数据
Size[] sizes = Size.values();
Sex[] sexs = Sex.values();
System.out.println("sizes=");
for(Size s : sizes){
System.out.println("s = " + s);
}
System.out.println("sexs=");
for(Sex s : sexs){
System.out.println("sex=" + s);
}
}
}
* Java中的枚举类型也是类,
* Java中的类都隐含从Object
* 派生,Java中的枚举类型都
* 隐含从Enum类派生
* Java的枚举类型一般都是全部大写
*
* SMALL,MEDIUM,LARGE..
* 都可以看成是其中一个枚举类型的
* 实例
*
* Java Class反射类型,得到类型对象Class
* 1.<classname>.class
* 2.Class.forName(<classname>)
* 3.<instance>.getClass()
*
* Java类型转换
* BaseClass bc = new DerivedClass();
* DerivedClass dc = (DerivedClass)bc;
* 更加健壮的做法:
* if(bc instanceof DerivedClass){
* Java中的类型转换相当于C++
* 中的dynamic_cast
* DerivedClass dc = (DerivedClass)bc;
* }
*/
enum Size{
/*!Java的枚举类型的值,相当于默认定义的
* 实例的值,并且建议该值放到class文件的最前面*/
SMALL,
MEDIUM,
LARGE,
EXTRA_LARGE;
}
enum Sex{
/*! 这里就需要构造函数来构造了*/
MALE("m"),
FEMALE("f");
/*!性别的缩写*/
private String abbr;
/*!要特别注意的是枚举类型的构造函数必须是private
* 是为了保证枚举类型的有限性
*/
private Sex(String abbr) {this.abbr = abbr;}
public String getAbbrevation() { return abbr;}
}
public class JavaEnums{
public static void main(String[] args){
//将枚举类型的实例toString 转换成字符串
System.out.println("Small=" + Size.SMALL.toString());
System.out.println("Medium=" + Size.MEDIUM.toString());
//将枚举类型的字符串通过Enum.valueOf转换成枚举类型
System.out.println("Small=" + Enum.valueOf(Size.class, "SMALL"));
System.out.println("Large=" + Enum.valueOf(Size.class, "LARGE"));
//将枚举类型直接定义成类类型的
System.out.println("Male=" + Sex.MALE.toString());
System.out.println("Female=" + Sex.FEMALE.toString());
System.out.println("Male(Abbr)=" + Sex.MALE.getAbbrevation());
System.out.println("Female(Abbr)=" + Sex.FEMALE.getAbbrevation());
//这里valueOf指定的是实例的名称
System.out.println("Male=" + Enum.valueOf(Sex.class, "MALE"));
System.out.println("Female=" + Enum.valueOf(Sex.class, "FEMALE"));
//遍历枚举类型中的所有数据
Size[] sizes = Size.values();
Sex[] sexs = Sex.values();
System.out.println("sizes=");
for(Size s : sizes){
System.out.println("s = " + s);
}
System.out.println("sexs=");
for(Sex s : sexs){
System.out.println("sex=" + s);
}
}
}