JavaSE之枚举

目录

一、什么是枚举类?

二、为什么要使用枚举类?

三、如何声明和使用枚举类?

四、注意事项


一、什么是枚举类?

封装了一组常量对象。如果类型的对象数量固定,则可以定义成枚举类型。

二、为什么要使用枚举类?

在没有枚举类型的情况下,我们要表示如三原色、四季、性别这些对象时,往往都是定义成常量。如下面代码,但这么做的话有一些缺点,比如意义不明确,类型不安全被用于其他无关计算等。但是定义枚举类就可以解决这些问题。

class Color{
	public static final int RED = 1;
	public static final int GREEN = 2;
	public static final int BLUE = 3;
}
public class TestColor {
	public static void main(String[] args) {
		//输出 1 意义不明确
		System.out.println(Color.RED);
		//用于其他无法计算,类型不安全
		int n = Color.RED + 45;
		System.out.println(n);
	}
}

三、如何声明和使用枚举类?

1.枚举类的声明及成员

语法格式:

enum 类型名{
    对象;
    成员变量;
    构造器();private
    方法();
    抽象方法()  abstract
    重写 方法();
    实现其它接口中的方法
}

示例代码及枚举类型使用说明:

interface Info{
	void f();
}
//实现接口
enum Color implements Info{
	//给构造器传参
	RED(1,"红色") {
		@Override
		public void af() {
			System.out.println("red_af");
		}
		@Override
		public void f() {
			System.out.println("red_f");
		}
	},GREEN(2,"绿色") {
		@Override
		public void af() {
			System.out.println("green_af");
		}
		@Override
		public void f() {
			System.out.println("green_f");
		}
	},BLUE(3,"蓝色") {
		@Override
		public void af() {
			System.out.println("blue_af");
		}
		@Override
		public void f() {
			System.out.println("blue_f");
		}
	};
	private int no;
	private String name;
	public int getNo() {
		return no;
	}
	public void setNo(int no) {
		this.no = no;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	private Color(int no, String name) {
		this.no = no;
		this.name = name;
	}
	//方法
	public void show(){
		System.out.println("show");
	}
	//重写 只能重写Enum类中的一个方法,即toString方法
	@Override
	public String toString() {
		return this.no + ":" + this.name;
	}
	//抽象方法:所有对象都实现后,枚举类型变成抽象枚举类
	public abstract void af();
}
public class TestEnum {
	public static void main(String[] args) {
		System.out.println(Color.RED);
		//遍历所有的枚举对象
		for(Color c : Color.values()){
			//获取对象名字
			System.out.println(c.name());
			//获取对象的索引位置
			System.out.println(c.ordinal());
		}
		//用于switch语句
		/*Scanner sc = new Scanner(System.in);
		System.out.print("--输入一个颜色:");
		String str = sc.next();
		//将字符串转换成枚举类型
		Color color = Color.valueOf(str);
		switch (color) {
		case RED:
			System.out.println("是红色");
			break;
		case GREEN:
			System.out.println("是绿色");
			break;
		case BLUE:
			System.out.println("是蓝色");
			break;
		}*/
		//调用属性
//		System.out.println(Color.RED.no);
//		System.out.println(Color.RED.name);
//		Color.RED.setNo(10);
//		Color.RED.setName("Jiangw");
		System.out.println(Color.RED.getNo());
		System.out.println(Color.RED.getName());
		//调用方法
		Color.RED.show();
		//调用重写方法
		System.out.println(Color.RED);
		//调用抽象方法
		Color.RED.af();
		//调用接口方法
		Color.RED.f();
	}
}

2.反编译枚举类

命令:javap -private 全类名

四、注意事项

1.枚举底层是个类,隐式的继承了Enum类,不能再继承其他类了。

2.枚举类的对象必须在声明枚举类的第一行代码处列举出来。

3.所有的枚举对象都是public static final的。

4.枚举类的构造器都是私有的private。

5.对于一个非抽象枚举类通常是final的。

6.一个枚举类中,定义了abstract抽象方法并且所有对象都实现了这个抽象方法,那么这个枚举类就成了抽象枚举类了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值