• 黑马程序员-Java基础加强,枚举类入门


    ================ASP.Net+Android+IOS开发.Net培训、期待与您交流! ================

    J2SE1.5新增了一个enum关键字,用以定义 枚举类。正如前面看到的 ,枚举类是一种特殊的类,它一样可以有自己的方法和属性,可以实现一个或者多个接口,也可以定义自己的构造器。一个Java源文件中最多只能定义一个public访问权限的枚举类,且Java源文件也必须和该枚举类类名相同。

    枚举类与普通类有如下简单区别:

    1.枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是继承Object类。其中java.lang.Enum类实现了java.lang.Serializablejava.lang.Comparable两个接口。

    2.枚举类的构造器只能使用private访问控制符,如果省略了其构造器的访问控制符,则默认使用private修饰,如果强制指定访问控制符,则只能使用private修饰符。

    3.枚举类的所有实例必须在枚举类中显示的列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无须显示添加。

    4.所有枚举值都提供了一个values方法,该方法可以很方便的遍历所有枚举值。

    程序代码:

     1 package com.king.testenum;
     2 
     3  
     4 
     5 public enum SeasonEnum {
     6 
     7  
     8 
     9 SPRING,SUMMER,AUTUMN,WINTER;
    10 
    11 }

    利用命令行编译上面的程序将看到生成一个SeasonEnum.class文件,这表明枚举类是一个特殊的类,从某种程度上来看,enum关键字和classinterface关键字的作用大致相似。

    定义枚举值时,需要显示列出说有枚举值,所有枚举值以英文逗号分割,枚举值列出结束后以英文分号作为结束,这些枚举值代表了该枚举类的所有可能实例。

    如果需要使用该枚举值的实例,可以使用EnumClass.variable的形式,如SeasonEnum.SPRING

    程序代码:

     1 package com.king.testenum;
     2 
     3  
     4 
     5 public class EnumTest {
     6 
     7  
     8 
     9 /**
    10 
    11  * @author 王者黑桃
    12 
    13  */
    14 
    15 public void judge(SeasonEnum s){
    16 
    17 //switch语句里的表达式可以是枚举值
    18 
    19 switch(s){
    20 
    21 case SPRING:
    22 
    23 System.out.println("风和日丽,适合观光旅游");
    24 
    25 break;
    26 
    27 case SUMMER:
    28 
    29 System.out.println("挥汗如雨,适合海滩度假");
    30 
    31 break;
    32 
    33 case AUTUMN:
    34 
    35 System.out.println("天高气爽,适合游玩赏菊");
    36 
    37 break;
    38 
    39 case WINTER:
    40 
    41 System.out.println("寒风刺骨,需要运动保暖");
    42 
    43 break;
    44 
    45 }
    46 
    47 }
    48 
    49 public static void main(String[] args) {
    50 
    51 // 所有枚举类都有一个values方法,返回该枚举类的所有实例。
    52 
    53 for(SeasonEnum s:SeasonEnum.values()){
    54 
    55 System.out.println(s);
    56 
    57 }
    58 
    59 //平时使用枚举实例时,总是通过EnumClass.variable形式来访问
    60 
    61 new EnumTest().judge(SeasonEnum.SPRING);
    62 
    63  
    64 
    65 }

    上面程序测试了SeasonEnum枚举类的用法,该类通过values的方法返回了SeasonEnum枚举类的所有实例,并通过循环迭代输出了SeasonEnum枚举类的所有实例。不仅如此,程序switch表达式中还使用了SeasonEnum的对象作为表达式,这是JDK1.5增加了枚举后switch拓展的功能,switch表达式可以是任何枚举类实例。当switch表达式使用枚举类型变量时,后面的case表达式中的值可以直接使用枚举值的名字,无需添加枚举类作为限定。

    所有的枚举类都是继承了java.lang.Enum类,所以该枚举类可以直接使用父类中包含的几个方法:

    1.int compareTo(E o):该方法用于与指定的枚举对象比较先后顺序,同一个枚举实例只能和相同类型的枚举实例进行比较。如果该枚举对象位于指定枚举对象之后则返回正数,如果该枚举对象位于指定枚举对象之前则返回负数,否则返回零。

    2.String name():返回此枚举实例的名称。这个名称就是定义枚举类时列出的所有枚举值之一。于此方法相比,toString()方法返回更好的用户名称,值得程序员优先考虑。

    3.int ordinal():返回枚举值在枚举类中的索引值(就是枚举值在枚举声明中的位置,第一个枚举值的索引值为零)

    4.String toString():返回枚举常量名称,与name方法大致相似,但toString方法更常用。

    5.Public static<T extends Enum <T>> T valueOf(Class<T> enumType,String name):这是一个静态方法,用于返回指定枚举类中指定名称的枚举值。名称必须与在该枚举类中声明枚举值时所用的标识符完全匹配,不允许使用额外的空白字符。

    ================ ASP.Net+Android+IOS开发.Net培训、期待与您交流! ================

    详细请查看:http://edu.csdn.net

  • 相关阅读:
    @PathVariable和@RequestParam的区别
    Spring整合hibernate4:事务管理
    Android横竖屏切换生命周期
    Android-Universal-Image-Loader三大组件DisplayImageOptions、ImageLoader、ImageLoaderConfiguration详解
    Gson简要使用笔记
    Java Web 路径问题
    Java相对路径/绝对路径总结
    关于图片或者文件在数据库的存储方式归纳
    cf706C(dp)
    cf414B(dp)
  • 原文地址:https://www.cnblogs.com/super614508584/p/3506017.html
Copyright © 2020-2023  润新知