枚举类
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;
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);