枚举类

1. 枚举类与普通类相同之处

  • enum 与 class、interface 具有相同地位;
  • 可以继承多个接口;
  • 可以拥有构造器、成员方法、成员变量;

2. 枚举类与普通类不同之处

  • 默认继承 java.lang.Enum 类,所以不能继承其他父类;其中 java.lang.Enum 类实现了 java.lang.Serializable 和 java.lang.Comparable 接口;
  • 使用 enum 定义,默认使用 final 修饰,因此不能派生子类;
  • 构造器默认使用 private 修饰,且只能使用 private 修饰;
  • 枚举类所有实例必须在第一行给出,默认添加 public static final
//枚举类默认有一个values()方法,返回该枚举类型的所有实例
for(SeasonEnum s : SeasonEnum.values()){
  System.out.println(s);
}

枚举类的实例只能是枚举值,而不是随便通过new来创建枚举类对象

public enum Gender{
  MALE,FEMALE;
  public String name;
}
Gender g = Enum.valueOf(Gender.class, "FEMALE");
g.name = "女";

枚举类通常应设计成不可变类,建议将枚举类的成员变量都使用private final修饰。

//为枚举类显示定义带参数的构造器
public enum Gender{
  //此处的枚举值必须调用对应的构造器来创建
  MALE("男"),FEMALE("女");
  //相当于
  //public static final Gender MALE = new Gender("男");
  //public static final Gender FEMALE = new Gender("女");

  private final String name;
  //枚举类的构造器只能用private修饰
  private Gender(String name){
     this.name = name;
  }
  public String getName(){
     return this.name
  }
}

实现接口的枚举类

如果需要每个枚举值在调用该方法时呈现出不同的行为,则可以让每个枚举值分别来实现该方法。

interface Info {
    void info();
}
enum Gender implements Info{
    MALE("男") {
        //花括号实际上是一个类体部分,匿名内部类语法。
        public void info() {
            //  分别实现接口方法
        }  
    }, 
    FEMALE("女") {
        //花括号实际上是一个类体部分,匿名内部类语法。
        public void info() {
            // 分别实现接口方法    
        }
    };
    private final String name;
    private Gender(String name) {
        this.name = name;
    }
        public String getName() {
        return this.name;
    }
}
public class Demo {
    public static void main(String[] args) {
        // valueOf 是 Enum 中的静态方法,用于:返回指定枚举类中,指定名称的枚举值
        Gender tom = Gender.valueOf(Gender.class, "FEMALE");
        tom.name = "female";
        System.out.println(tom + " + " + tom.name);
    }
}

 

自动装箱和拆箱

//装箱的过程会创建对应的对象,这个会消耗内存,所以装箱的过程会增加内存的消耗,影响性能。 
//自动装箱
 Integer total = 99;
 //自定拆箱
 int totalprim = total;

Java 枚举类里面根据不同类型 走不同的方法 java中枚举和普通类的区别_java

String intStr = "123";

//把字符串类型的值转换为基本类型的值
//利用包装类提供的static int parseInt(String s)静态方法(除Character之外的所有包装类都提供了该方法)
int it1 = Integer.parseInt(intStr);
//利用包装类提供的static Integer valueOf(String s)静态方法
int it2 = Integer.valueOf(intStr);

//int intValue() 以int的形式返回Integer对象的值

//把基本类型变量转换成字符串
String fsStr = String.valueOf(2.345f);