Java8 枚举

枚举类:实例有限而且固定的类

手动实现枚举类:直接使用public static final修饰常量

枚举类入门:定义枚举类关键字enum是一种特殊的类
枚举类与普通类的区别:
1、可以实现一个或多个接口,使用enum定义默认继承了java.lang.Enum类,不继承Object以及其他类
2、实现了java.lang.Serializable和java.lang.Comparable两个接口
3、使用enum定义,非抽象的枚举类默认会使用final修饰,枚举类不能派生子类
4、枚举类的构造器只能用private控制,没写修饰的话,默认private
5、枚举类所有实例必须在枚举类第一行显式列出,否则永远无法产生实例
6、默认提供values()方法遍历枚举值

public enum SeasonEnum{
Spring,Summer,Winter,Fall;
}

使用枚举类实例

package practice;//这里有点问题
import java.lang.*;
import java.util.*;
enum SeasonEnum{
   Spring,Summer,Winter,Fall;
}
public class Main{
	public void judge(SeasonEnum s) {
		switch(s) {
		case Spring://case可以直接使用,不需要通过类名
			System.out.println("春暖花开");
			break;
		case Summer:
			System.out.println("2");
			break;
		case Fall:
			System.out.println("3");
			break;
		case Winter:
			System.out.println("4");
			break;
		}
	}
public static void main(String[] args) {
	for(SeasonEnum s:SeasonEnum.values()) {
		System.out.println(s);//==toString();
	}
	new Main().judge(SeasonEnum.Spring);//通过这个形式访问实例
}
}

在这里插入图片描述
枚举类的成员变量、方法和构造器
枚举类的实例只能是枚举值,不是通过new来构造

package practice;
import java.lang.*;
import java.util.*;
enum Gender{
	Male,Female;
	public String name;//成员变量
}
public class Main{
	public static void main(String[] args) {
		Gender g=Enum.ValueOf(Gender.class,"Female");//通过Eunm的valueOf方法来获取指定枚举类的枚举值
		g.name="女";
		System.out.println(g+"代表"+g.name);
	}
}

改进版增加封装性:

package practice;
import java.lang.*;
import java.util.*;
enum Gender{
	Male,Female;
	private String name;//避免其他程序直接访问
	public void setName(String name) {
		switch(this) {
		case Male:
			if(name.equals("男")) {
				this.name=name;
			}
			else {
				System.out.println("Wong");
				return;
			}
			break;
		case Female:
			if(name.equals("女")) {
				this.name=name;
			}
			else {
				System.out.println("wrong");
			}
			break;
		}
	}
public String getName() {
	return this.name;
}
}

枚举类通常应该设置成不可变类,应该讲成员变量都使用private final修饰
所以必须在构造器里为这些成员变量指定初始值(或者在定义成员变量时指定默认值,或在初始化块中指定初始值)即枚举类显式定义了带参数构造器,列出枚举值时就必须对应的传入参数。

package practice;
import java.lang.*;
import java.util.*;
enum Gender{
	Male("男"),Female("女");
	private final String name;
	private Gender(String name) {
		this.name=name;
	}
	public String getName() {
		return this.name;
	}
}

当Gender枚举类创建一个构造器以后,列出的枚举值就用粗体字,在枚举类中列出枚举值时,实际上就是调用构造器创建枚举类对象,只是不需要用new,也无需显式构造器。
枚举类也可以实现多个接口,使用方法和普通类一样
如果由枚举类来实现接口里的方法,则每个枚举值在调用该方法时都有相同的行为方式。
如果需要每个枚举值在调用该方法时呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法,每个枚举值提供不同的实现方式

enum Gender implements GenderDesc{
	Male("男")
	{
		public void info() {
			System.out.println("代表男性");
		}
	},//这里花括号是一个整体
	Female("女");
	{
		public void info() {
			System.out.println("代表女性");
		}
	};
}

包含抽象方法的枚举类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值