JDK5.0新特性系列---3.枚举类型

简介:

/**

*enum关键字表示枚举类型,它的作用相当于类声明中的class关键字

*枚举类型不能有public的构造方法

*所有的枚举值都是publicstaticfinal,这些修饰符都是自动加上,无须程序员手动添加

*枚举值之间用逗号","分开,最后一个枚举值后面接分号";"

*每一个枚举值是一个枚举类型的实例

*可以在枚举类型中定义非枚举值变量,这些变量可以使用任何修饰符

*变量和方法的定义必须在枚举值后面定义

*/

public class EnumType {

/**Person的枚举类型*/

enum Person{

CHINESE, //中国人

AMERICAN, //美国人

ENGLISH; //英国人

}

public static void main(String[] args){

System.out.println("Person枚举值的数目: " + Person.values().length);

//遍历枚举类型中的所有值

System.out.println("Person枚举值如下: ");

Person[] ps = Person.values(); //values()方法返回Person类型的数组

for (Person p : ps){

System.out.print(p + " "); //toString()方法返回枚举值的名称,此处打印CHINESE AMERICAN ENGLISH

}

System.out.println();

Person p = Person.CHINESE;

//比较枚举值

if(p == Person.CHINESE){

System.out.println("p' value equals Person.CHINESE");

}

//使用valueOf获得字符串描述的枚举值

p = Person.valueOf("AMERICAN");

//switch中使用枚举值

//switch中可以放置的类型有byte,short,int,char,enum,注意没有long

switch(p){

case CHINESE:

System.out.println("p is Chinese");

break;

case AMERICAN:

System.out.println("p is American");

break;

case ENGLISH:

System.out.println("p is English");

break;

}

//获得枚举值在枚举类型中声明的顺序

System.out.println("AMERICAN的序号: " + Person.AMERICAN.ordinal());

System.out.println("CHINESE的序号: " + Person.CHINESE.ordinal());

System.out.println("ENGLISH的序号: " + Person.ENGLISH.ordinal());

//使用更复杂的枚举类型ComplexPerson

ComplexPerson cp = ComplexPerson.CHINESE;

//因为为CHINESE枚举值覆盖了toString()方法,所以调用的是CHINESEtoString方法

System.out.println("cp.toString(): " + cp);

cp = ComplexPerson.AMERICAN;

//因为没有为AMERICAN枚举值覆盖toString方法,所以调用默认的toSting方法

cp = ComplexPerson.OTHER;

System.out.println("cp.getValue(): " + cp.getValue());

}

/**一个更复杂的枚举类型*/

enum ComplexPerson{

//枚举值

//CHINESEvalue属性为"中国人"

CHINESE("中国人"){

public String toString(){

return "这是个中国人";

}

},

AMERICAN("美国 "),

ENGLISH("英国人"){

public String toString(){

return "这是个英国佬";

}

},

OTHER{

public String toString(){

return "这是个其它国家的人";

}

};

private String value = null; //枚举类值的value属性,只能声明在枚举值的后面

//默认的构造方法

ComplexPerson(){

value = "其他人";

}

//带参数的构造方法

ComplexPerson(String value){

this.value = value;

}

//获取value属性

public String getValue(){

return this.value;

}

}

}




本文转自远哥博客园博客,原文链接:http://www.cnblogs.com/taven/archive/2011/12/17/2291455.html,如需转载请自行联系原作者

相关文章
|
3月前
|
容器
jdk8新特性-详情查看文档
jdk8新特性-详情查看文档
46 3
|
2月前
|
存储 安全 Java
JDK1.8 新的特性
JDK1.8 新的特性
21 0
|
3月前
|
编解码 安全 Java
jdk8新特性-接口和日期处理
jdk8新特性-接口和日期处理
|
4月前
|
Java API
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
JDK8到JDK25版本升级的新特性问题之使用Collectors.teeing()来计算一个列表中学生的平均分和总分如何操作
|
4月前
|
Java API Apache
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
JDK8到JDK24版本升级的新特性问题之在Java中,HttpURLConnection有什么局限性,如何解决
|
4月前
|
Oracle Java 关系型数据库
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
JDK8到JDK29版本升级的新特性问题之未来JDK的升级是否会成为必然趋势,如何理解
|
4月前
|
Oracle 安全 Java
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
JDK8到JDK28版本升级的新特性问题之在Java 15及以后的版本中,密封类和密封接口是怎么工作的
|
4月前
|
Java API 开发者
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
133 0
JDK8到JDK17版本升级的新特性问题之SpringBoot选择JDK17作为最小支持的Java lts版本意味着什么
|
3月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
15 0
|
4月前
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化