Java面向对象编程-枚举类

本文详细介绍了Java中的枚举类型,包括枚举的定义、枚举类与Enum类的区别、如何定义枚举结构以及枚举在实际开发中的应用案例。枚举提供了安全、简洁的多例设计,可以用于限制变量的取值,如在性别类别的表示中。枚举可以拥有构造方法、普通方法和属性,甚至可以实现接口,提高了代码的可读性和维护性。
摘要由CSDN通过智能技术生成

枚举类

1、枚举

很多的编程语言都会提供有枚举的概念,但是Java一直到JDK1.5之后才提出了枚举的概念
在实际的开发之中,枚举的实际作用是用于定义有限个数对象的一种结构(多例设计),枚举就属于多例设计,并且其结构要比多例设计更加简单

枚举的定义

从JDK1.5之后在程序之中提供有enum的关键字,利用此关键字可以实现美剧的定义。
例:定义一个枚举类

enum Color{	//枚举类
	RED,GREEN,BLUE;	//实例化对象
}

public class JavaDemo{
	public static void main(String args []){
		Color color = Color.RED;	//获取实例化对象
		System.out.println(color);	
	}
}

如果此时采用了多例设计模式来进行设计,那么需要编写很多程序代码,这样对于开发的复杂度是比较高的
因为多例设计模式牵扯到了构造方法的私有化以及静态方法。
多例设计与枚举设计虽然可以实现相同的功能,但是使用枚举可以在程序编译的时候就判断所使用的实例化对象是否存在。
在进行枚举处理的时候还可以利用values()方法获取所有的枚举对象进行输出。
例:获取所有的枚举对象

enum Color{	//枚举类
	RED,GREEN,BLUE;	//实例化对象
}

public class JavaDemo{
	public static void main(String args []){
		for(Color color : Color.values()){
			System.out.println(color);
		}
	}
}

如果此时同样的功能需要通过多例设计来解决的话,那么就需要使用对象数组了
从JDK1.5追加了枚举结构之后,就可以在switch之中进行枚举项的判断
例:枚举与switch处理

enum Color{	//枚举类
	RED,GREEN,BLUE;	//实例化对象
}

public class JavaDemo{
	public static void main(String args []){
		Color color = Color.RED;
		switch(color){
			case RED:
				System.out.println("红色");
				break;
			case GREEN:
				System.out.println("绿色");
				break;
			case BLUE:
				System.out.println("蓝色");
				break;
		}
	}
}

多例上是无法实现与switch直接连接的,多例想要实现这样的方式,就需要编写大量的if判断

2、Enum类

严格意义上来讲枚举并不属于一种新的结构,它的本质相当于是一个类,但是这个类默认会继承Enum类
Enum类的基本定义:

public abstranct class Enum<E extends Enum<E>>
extends Objects
implements Comparable<E>,Serializable

现在定义的枚举类的类型就是Enum中所使用的E类型

Enum类中定义的方法:

No方法名称类型用途
1protected Enum(String name,int ordinal)构造传入名字和序号
2public final String name()普通获得对象名字
3public final int ordinal()普通获得对象序号

观察Enum类的存在:

enum Color{	//枚举类
	RED,GREEN,BLUE;	//实例化对象
}

public class JavaDemo{
	public static void main(String args []){
		for(Color color : Color.values()){
			System.out.println(color.ordinal() + "---" + color.name());
		}
	}
}

在枚举之中每一个对象的序号都是根据枚举对象的定义顺序来决定的。

面试题:请解释enum和Enum的区别

  • enum:是从JDK1.5之后提供的一个关键字,用于定义枚举类
  • Enum:是一个抽象类,所以使用enum关键字定义的类就默认继承了此类

3、定义枚举结构

一直在强调枚举本身就水域一种多例设计模式,那么既然是多例设计模式,那么在一个类之中可以定义的结构是非常多的
例如:构造方法、普通方法、属性等,那么这些内容在枚举类中依然可以直接定义,但是需要注意的是,枚举类中定义的构造方法不能够采用非私有化定义

	例:在枚举类中定义其他的结构
enum Color{	//枚举类
?	RED("红色"),GREEN("绿色"),BLUE("蓝色");	//枚举对象要写在首行
?	private String title;
?	private Color(String title){
?		this.title = title;
?	}
?	public String toString(){
?		return title;
?	}
}

public class JavaDemo{
	public static void main(String args []){
		for(Color color : Color.values()){
			System.out.println(color.ordinal() + "---" + color.name() + "---" + color);
		}
	}
}

本程序在简化程度上一定要远远高于多例设计模式。处理这种基本的结构之外,在枚举类中也可以实现接口的继承
例:让枚举实现继承

interface IMessage{
	String getMessage();
}

enum Color implements IMessage{	//枚举类
	RED("红色"),GREEN("绿色"),BLUE("蓝色");	//枚举对象要写在首行
	private String title;
	private Color(String title){
		this.title = title;
	}
	public String toString(){
		return title;
	}
	public String getMessage(){
		return title;
	}
}

public class JavaDemo{
	public static void main(String args []){
		IMessage message = Color.RED;
		System.out.println(message.getMessage());
	}
}

枚举类中可以直接定义抽象方法,枚举的定义是十分灵活的
但是在实际应用中不建议在枚举类中定义抽象方法
在使用枚举类时,更多情况下还是建议使用它的正确用法,就是定义实例对象即可!

4、枚举应用案例

现在定义一个Person类,里面一定有性别,性别肯定不希望用户随意输入,所以使用枚举最合适

enum Sex{
	MAN("男"),WOMAN("女");
	private String title;
	private Sex(String title){
		this.title = title;
	}
	public String toString(){
		return 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 JavaDemo{
	public static void main(String args []){
		System.out.println(new Person("沈梦琳",18,Sex.WOMAN));
	}
}

这个程序就算不使用枚举也可以实现,追加几个判断即可
所以对于枚举,愿意用就用户,不愿意用就不用,并非严格要求,但要看懂,以防止其他人的代码中出现枚举时看不懂的情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MyRedScarf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值