JAVA基础(九)-----枚举类,自动装箱和拆箱
枚举类
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);
浙公网安备 33010602011771号