学习笔记——枚举(枚举类、Enum类、枚举结构(接口、抽象类))

定义枚举类

枚举是特殊的多例设计,其与表达意义相同。在jdk1.5之后提供enum关键字,利用此关键字可以实现枚举定义。
例子:定义一个枚举

package a.a.a;
enum Color{ //枚举
 红色,绿色,蓝色;//实例化对象
}
public class Java {
public static void main(String[] args) {
	Color x=Color.红色;
	System.out.println(x);
  }
}

此时采用多列设计模式会涉及很多代码,其中涉及到了构造方法私有化,静态方法等。多例设计与枚举实现相同效果,但是枚举可以在编译过程中检测到实例化对象是否存在*。
例子:枚举定义有方法可以获取所以实例化对象的值

package a.a.a;
enum Color{ //枚举
红色,绿色,蓝色;//实例化对象
}
public class Java {
public static void main(String[] args) {
	for (Color x:Color.values() ){
		System.out.println(x);
	  }
	}
}

输出:
红色
绿色
蓝色
例子:观察枚举与switch进行判断处理

package a.a.a;
enum Color{ //枚举
红色,绿色,蓝色;//实例化对象
}
public class Java {
public static void main(String[] args) {
	Color x=Color.红色;
	switch(x){ //直接枚举
		case 红色:
		System.out.println("red");
		break;
		case 绿色:
		System.out.println("green");
		break;
		case 蓝色:
		System.out.println("blue");
		break;
	}
 	}
}

输出:red


Enum类

严格意义上枚举并不属于一种新的结构,其本质相当于一个类,这个类默认继承了Enum类。Enum类定义如下:
public abstract class Enum<E extends Eunm>
extends Object
implements Comparable,Serializable
现在定义的枚举类的类型就是Enum中所使用的E类型。

例子:观察Enum类存在

package a.a.a;
enum Color{ //枚举
红色,绿色,蓝色;//实例化对象
}
public class Java {
public static void main(String[] args) {
	for (Color x:Color.values()){
	System.out.println(x.ordinal()+"--"+x.name());  //输出序号和名称
	}
}
}

输出结果:
0–红色
1–绿色
2–蓝色
序号是根据对象的顺序发生变化的。
观察enum与Enum的区别?
·enum从jdk1.5之后提供的关于定义枚举的关键字;
·Enum是一个无法直接看见的抽象类,使用enum关键字定义的类就默认继承了此类。


定义枚举结构

枚举本身属于一种多例设计模式,那么在一个类的定义的结构非常多。例如:构造方法、普通方法、属性等。这些内容可以在枚举直接定义,但是需要注意的是多例设计中构造方法私有化,枚举类中定义的构造方法不能非私有化定义(即public不可使)。
例子:枚举类中定义多种结构

package a.a.a;
  enum Color{ //枚举类
红色(""),绿色("绿"),蓝色("蓝");//实例化对象枚举对象,必须写在第一行
private String title;
private Color(String title){
    this.title=title;
    }
public String toString(){
    return this.title;
	}
}
public class Java {
public static void main(String[] args) {
	for (Color x:Color.values()){
	System.out.println(x.ordinal()+"--"+x.name()+"--"+x);
	}
    }
}

输出结果:
0–红色–红
1–绿色–绿
2–蓝色–蓝
除了基本结构之外,枚举也可以实现接口继承。
例子:枚举实现接口

package a.a.a;
interface IMessage{
public String getMessage();
  }
enum Color implements IMessage{ //枚举类
红色("红色"),绿色("绿色"),蓝色("蓝色");//实例化对象枚举对象,必须写在第一行
private String title;
private Color(String title){
    this.title=title;
  }
public String toString(){
    return this.title;
  }
public String getMessage(){
	return this.title;
  }
}
public class Java {
public static void main(String[] args) {
	IMessage x=Color.红色;
	System.out.println(x.getMessage());
	}
}

枚举可以直接定义在抽象方法,并且要求每一个枚举对象独立覆写实现此方法。


枚举应用案例

假设现在定义有一个Person类,类中属性有性别,不希望用户随意输入,只有男女两种选择。

enum Sex{
MALE("男"),FEMALE("女");
private String title;
private Sex(String title){
    this.title=title;
}
public String toString(){
    return this.title;
	}
}
class Person{
private String name;
private int age;
private Sex sex;//性别
public Person(String name,int age,Sex sex){
	this.name=name;
	this.age=age;
	this.sex=sex;
}
public String toString(){
    return "姓名:"+this.name+"、年龄:"+this.age+"、性别:"+this.sex;
	}
}
public class Java {
public static void main(String[] args) {
	Person a=new Person("温情",19,Sex.FEMALE);
	System.out.println(a.toString());
	System.out.println(new Person("温宁",18,Sex.MALE).toString());
    }
}

输出结果:
姓名:温情、年龄:19、性别:女
姓名:温宁、年龄:18、性别:男

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值