java 枚举类型

package forTest;

/*
枚举也是一种特殊形式的Java类
枚举中声明的每一个枚举值代表枚举类的一个实例对象
枚举的构造函数必须为私有的
枚举可以实现接口或者继承抽象类
JDK5之后的swith语句还可以接收枚举类型
枚举都继承了java。lang。Enum类 
*/

public class Enum {

 public static void main(String[] args) {
  String value1 = Grade1.A.getValue();
  String value2 = Grade2.B.getValue();
  String value3 = Grade3.A.level();
  System.out.println(value1 + "..."+value2+"..."+value3);
  
  //枚举继承的方法:
  System.out.println(Grade2.A.name());
  System.out.println(Grade2.A.ordinal());//返回它在枚举中的位置
  String str = "A";
  Grade2 g = Grade2.valueOf(Grade2.class,str);//返回带指定名称的指定枚举类型的枚举常量。
  Grade2 gg = Grade2.valueOf(str);//同上
  System.out.println(g+"..."+gg);//String toString() 返回枚举常量的名称,它包含在声明中。
  Grade2 values[] = Grade2.values();//遍历枚举值
 }

}

//1,枚举Grade2相当于此类的简写形式
class Grade1{
 public static final Grade1 A = new Grade1("100-90");
 private String value;
 private Grade1(String value) {
  this.value = value;
 }
 
 public String getValue() {
  return this.value;
 }
}

//2,枚举类,单例模式的扩展型,枚举中的实例不一定非得是final的,如果只有一个实例,那就是单例设计模式了
enum Grade2{
 A("100-90"),B("10-90");
 private String value;
 private Grade2(String value) {
  this.value = value;
 }
 
 public String getValue() {
  return this.value;
 }
 
/* public void setValue(String value) {
  this.value = value;
 } 不加final也可以用这个方法来改变值*/
}

//3,带抽象方法的枚举类
enum Grade3{
 A("100-90") {
  public String level() {
   return "学霸";
  }
 }
 
 ,B("10-90") {
  public String level() {
   return "屌丝";
  }
 };
 
 private String value;
 private Grade3(String value) {
  this.value = value;
 }
 
 public String getValue() {
  return this.value;
 }
 public abstract String level();
}

原文地址:https://www.cnblogs.com/flying607/p/3443237.html