Java Enum枚举类学习

    枚举类是一个特殊的类,这个类的实例对象是有限的而且是固定的,在定义枚举类的时候就已经生成,不可增加。比如一年四季,只有四个固定的对象。主要区别如下:

1. 枚举类可以实现一个或者多个接口,使用enum定义的枚举类默认继承java.lang.Enum类,而不是继承java.lang.Object类,因此只能实现接口不可继承自其他类。

2. 默认final,无法继续派生子类

3. 枚举所有实例在代码块中第一行显式列出,并默认使用public static final修饰。

4. 枚举实例之间使用逗号隔开,列举之后使用分号结束。之后可定义方法或实现接口方法。

5. 如果编写构造方法,则默认private权限,显式指定也只能指定private。该构造方法仅在执行第一行代码生成枚举实例的时候调用。


方法:

public static enumtype []values();    返回一个枚举类型的组合,包含所有实例。 返回SeasonEnum[]

public static enumtype valueOf(string str);   返回制定名称的枚举实例. SeasonEnum s = SeasonEnum.valueOf("Spring")


枚举类

public enum SeasonEnum {

 Spring("Spring"), Summer(Summer), Fall(Fall), Winter(Winter); 

private String name;

private SeasonEnum(string str){

name = str;

 }

public String print(){ return System.out.println(this.name); }

 }


执行:

for(SeasonEnum s : SeasonEnum.values())  { s.print()  }


补充方法:

final int ordinal() 返回实例在枚举类中的序号 序号声明从0开始 比如 SeasonEnum s = SeasonEnum.Spring; int index = s.ordinal(); a等于0;

final int compareTo().     返回序号的比较结果 s1是春 s2是夏 s1.compareTo(s2) 结果为-1. 当序号较小返回-1,相等0,较大+1;

boolean equals(Object obj) 比较是否相等,用法和compareTo差不多。

public String toString().  

public static> T valueOf(Class enumtype, String name). 根据指定枚举类型和具体名称,返回枚举实例。注意这是一个静态方法。也就是说是通过Enum类调用的。举例:

SeasonEnum s = Enum.valueOf(SeasonEnum.class, "Spring");

注意和之前的valueOf的区别。


进阶:

由于Enum枚举类的特性,实例只在一开始构建一次,而且构造方法为private。这个特点可以实现单例模式。比如一个事件模块:

public enum EventModule{

INSTANCE;

...

//在这里写其他方法

 }


你可能感兴趣的:(Java)