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

简介:   /**  *enum关键字表示枚举类型,它的作用相当于类声明中的class关键字  *枚举类型不能有public的构造方法  *所有的枚举值都是public、static、final的,这些修饰符都是自动加上,无须程序员手动添加  *枚举值之间用逗号","分开,最后一个枚举值后面接...
 

/**

 *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;

              }

       }

}

 

 

 

 

目录
相关文章
|
7月前
|
存储 安全 Java
JDK1.5 新特性【泛型】
JDK1.5 新特性【泛型】
|
3月前
|
Java 编译器 API
JDK8新特性--lambda表达式
JDK8的Lambda表达式是Java语言的一大进步。它为Java程序提供了更多的编程方式,让代码更加简洁,也让函数式编程的概念在Java中得到了体现。Lambda表达式与Java 8的其他新特性,如Stream API、新的日期时间API一起,极大地提高了Java编程的效率和乐趣。随着时间的流逝,Java开发者对这些特性的理解和应用将会越来越深入,进一步推动Java语言和应用程序的发展。
15 0
|
4月前
|
安全 Java 编译器
JDK版本特性问题之想在 JDK 10 中,使用var 关键字,如何实现
JDK版本特性问题之想在 JDK 10 中,使用var 关键字,如何实现
|
7月前
|
存储 算法 Java
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(二)
|
7月前
|
安全 JavaScript 前端开发
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(一)
JDK8-JDK17中的新特性(var类型推断、模式匹配、Record、密封类)(一)
|
Java
JDK8新特性之方法引用
方法引用的几种常用方式 应用场景:如果Lambda表达式所要实现的方案,已经有其他方法存在相同的方案,那么则可以使用方法引用.
120 0
【JDK8 新特性4】方法引用
在介绍方法引用前,我们要来了解Lambda表达式的冗余场景,虽然Lambda表达式已经帮我们简化的不少代码,但是它还是会有冗余的情况。
|
Java
【jdk8新特性】方法引用
【jdk8新特性】方法引用
100 0