Java枚举(enum)

Posted M.H.Z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java枚举(enum)相关的知识,希望对你有一定的参考价值。

枚举是一个被命名的整型常数的集合,用于声明一组带标识符的常数。枚举在曰常生活中很常见,例如一个人的性别只能是“男”或者“女”,一周的星期只能是 7 天中的一个等。类似这种当一个变量有几种固定可能的取值时,就可以将它定义为枚举类型。

Java 枚举类使用 enum 关键字来定义,各个常量使用逗号 , 来分割,结尾使用分号;结束

 

定义一个季节的枚举类

enum Season
    spring,summer,autumn,winter;
//   常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天,系统会自动添加 public static final 修饰
 
enum Season
    spring,summer,autumn,winter;
//   常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天,系统会自动添加 public static final 修饰



public class SeasonEnum 

    public static void main(String[] args) 


        System.out.println("请输入季节"+"\\n"+"1、春天"+"\\n"+"2、夏天"+"\\n"+"3、秋天"+"\\n"+"4、冬天");
        Scanner scan =new Scanner(System.in);
        int seasons= scan.nextInt();
        change(seasons);
    

    private static void change(int seasons) 
        Season season=Season.spring;
        switch (seasons)
            case 1:
                season=Season.spring;

                break;
            case 2:
                season=Season.summer;
                break;
            case 3:
                season=Season.autumn;
                break;
            case 4:
                season=Season.winter;
                break;
        
        System.out.println(season);
    

枚举类

enum 定义的枚举类默认继承了 java.lang.Enum 类,并实现了 java.lang.Serializable 和 java.lang.Comparable 两个接口。

values(), ordinal() 和 valueOf() 方法位于 java.lang.Enum 类中:

  • values() 返回枚举类中所有的值。
  • ordinal()方法可以找到每个枚举常量的索引,就像数组索引一样。
  • valueOf()方法返回指定字符串值的枚举常量。

values()方法

 values( ) 方法可以将枚举的所有成员以数组形式返回,也可以通过该方法获取枚举类型的成员。

enum Season
    spring,summer,autumn,winter;
//   常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天,系统会自动添加 public static final 修饰





public class SeasonEnum 
   public static void main(String[] args) 
//        迭代季节
        for (Season season : Season.values()) 
            System.out.println(season);
        
   

结果:

ordinal()方法

 ordinal() 方法可以获取一个成员在枚举中的索引位置。下面的示例创建一个包含 3 个成员的枚举类型 Signal,然后调用 ordinal() 方法输出成员及对应索引位置。

enum Season
    spring,summer,autumn,winter;
//   常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天,系统会自动添加 public static final 修饰





public class SeasonEnum 
   public static void main(String[] args) 
//        迭代季节
        for (Season season : Season.values()) 
//            ordinal可以找到每个枚举常量的索引,就像数组索引一样。
            System.out.println(season+"  索引为  "+season.ordinal());
        
   

结果:

 valueOf()方法

valueOf()方法返回指定字符串值的枚举常量

enum Season
    spring,summer,autumn,winter;
//   常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天,系统会自动添加 public static final 修饰





public class SeasonEnum 
   public static void main(String[] args) 

//        使用 valueOf() 返回枚举常量,不存在的会报错 IllegalArgumentException
         System.out.println(Season.valueOf("summer"));
   //    System.out.println(Season.valueOf("summ"));
   

结果

枚举类成员

枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用 private 访问修饰符,所以外部无法调用。

枚举既可以包含具体方法,也可以包含抽象方法。 如果枚举类具有抽象方法,则枚举类的每个实例都必须实现它。

 

enum Season
    spring,summer,autumn,winter;
//   常量有 spring, summer, autumn,winter,分别表示春天,夏天,秋天,冬天,系统会自动添加 public static final 修饰
     
    //    构造方法
    private Season()
        System.out.println("Constructor called for :" +this.toString());
    

    public void SeasonInfo()
        System.out.println("spring");
    






public class SeasonEnum 
   public static void main(String[] args) 

         Season season=Season.spring;
         season.SeasonInfo();
   

 

java enum类型

protected enum PropertyKeys
title
,titleStyle
,titleStyleClass
,disabled
,closable
,titletip;
String toString;
PropertyKeys(String toString)
this.toString = toString;

PropertyKeys()
public String toString()
return ((this.toString != null) ? this.toString : super.toString());


这个String toString;是起什麽作用?

参考技术A 这里是自己定义了toString函数,也就是重写了这个函数。java里很多类都定义了toString方法,作用是将类的内容转化为可见的字符串便于显示。这里重写了toString同样也是这个作用。 参考技术B 这里的String toString没什么作用 只是个说明这里的参数是 String类型的 变量是toString而已。一般没有这么写变量名的 难怪楼主迷惑。变量名都是写对应功能的英文名字。希望对您有所帮助追问

PropertyKeys(String toString) 这个是构造器吗?听说枚举变异后会生成一个继承枚举的类,如果是构造器那要怎麼个用法?

追答

是默认构造器。这个构造器没什么太大的作用只是初始化而已。一般开发 都省略构造器的。这里也可以省略的

本回答被提问者采纳
参考技术C 这个函数的作用是 如果这个枚举类型的变量不为空 则返回这个枚举类型变量的toString这个字符串
否则 返回父类的toString()方法中的字符串
参考技术D String toString在这里实际上没有什么多大作用,建议不要这么写追问

这是是看某个类的源码时看到的。

追答

PropertyKeys(String toString) 这个是构造器, 类构造器使用new ,在枚举中不要用构造器

以上是关于Java枚举(enum)的主要内容,如果未能解决你的问题,请参考以下文章

java 枚举enum定义的方法与位置。

java enum类型

java枚举类型

关于java枚举enum的问题,请指教?

java 的 枚举类型 在Eclipse里面用enum报错

java 的 枚举类型 在Eclipse里面用enum报错