当前位置:   article > 正文

Java枚举_枚举类型获取里面指定的对象

枚举类型获取里面指定的对象

Java枚举类

一个类中的对象 认为个数是有限且固定的 可以将每一个对象一一列举出来
  • 1

在这里插入图片描述

1.概念

enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性。在Java中,被 enum 关键字修饰的类型就是枚举类型。

2.示例(在没有枚举时,自己设计一个类)

1.试一试若没有枚举类型的时候 如何手动设计 (静态常量 单例模式) Day(类 当做描述星期 7个对象)
private构造方法
public static final属性 = new

package myenum;

public class MyDay {//描述星期  7个
	
	//类似单例模式小的想法
	
	//构造方法私有
	private MyDay() {}
	//所有对象都是属性
	public static final MyDay mondy = new MyDay();
	public static final MyDay tuesday = new MyDay();
	public static final MyDay wednesday = new MyDay();
	public static final MyDay thursday = new MyDay();
	public static final MyDay firday = new MyDay();
	public static final MyDay saturday = new MyDay();
	public static final MyDay sunday = new MyDay();
	//一般属性 一般方法随便设计 上面七个只是控制对象。
	//在没有枚举之前,我们可以通过自己设计
	public static void main(String[] args) {
		Day[] days = Day.values();//获取所有的枚举对象
		for(Day d: days) {
			System.out.println(d.name()+"---"+d.ordinal());
		}
		Day d = Day.valueOf("monday"); //获取指定的枚举对象
		System.out.println(d.name()+"---"+d.ordinal());
	}
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
3.JDK1.5版本之后可以直接定义enum类型
	我们自己定义的enum类型直接默认继承Enum(java.lang包)
	我们自己定义的enum类型不能再写extends 但是可以实现
	Enum类型
		有两个属性
		name----->枚举对象的名字     name()获取name属性
		ordinal--->枚举对象在类中罗列的顺序  类似index  也从0开始   ordinal()获取序号
		一些常用的方法
		valueOf()   通过给定的name获取对应的枚举对象
		values()     获取全部的枚举对象  ---> 返回一个数组  Day[]
		compareTo()   可以比较两个枚举对象   int
		toString()	  由于这个方法没有final修饰  可以覆盖(重写)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

所有枚举类都是Enum的子类,默认继承Enum,间接继承Object。
所有枚举类都默认是Enum类的子类,无需我们使用extends来继承。这说明Enum中的方法所有枚举类都拥有。
int compareTo(E e):比较两个枚举常量谁大谁小,其实比较的就是枚举常量在枚举类中声明的顺序,例如FRONT的下标为0,BEHIND下标为1,那么FRONT小于BEHIND;
boolean equals(Object o):比较两个枚举常量是否相等;
int hashCode():返回枚举常量的hashCode;
String name():返回枚举常量的名字;
int ordinal():返回枚举常量在枚举类中声明的序号,第一个枚举常量序号为0;
String toString():把枚举常量转换成字符串;
static T valueOf(Class enumType, String name):把字符串转换成枚举常量。

enum 不可以继承另外一个类,当然,也不能继承另一个 enum 。
因为 enum 实际上都继承自 java.lang.Enum 类,而 Java 不支持多重继承,所以 enum 不能再继承其他类,当然也不能继承另一个 enum。

4.switch内部判断枚举的应用

(1)、在Day枚举类中列举7个对象。

package myenum;

public enum Day {
	//相当于描述了七个当前类的对象
	monday,tuesday,wednesday,thursday,friday,staturday,sunday;
	//可以直接罗列出来
	
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

(2)、在main方法里面,枚举类型与switch联用,判断枚举类型。

package myenum;

import java.util.Scanner;
public class Test {
	public static void main(String[] args) {
	
		//输入一个字符串monday  输出对应的信息
		Scanner input = new Scanner(System.in);
		System.out.println("请输入一个星期的英文单词:");
		String key = input.nextLine();
		Day days = Day.valueOf(key);//通过输入的英文单词找到对应的枚举对象
		switch (days) {//1.5之前  int(byte short)  char 1.6enum  1.7String
			case monday:
				System.out.println("你输入输入的是星期一");
				break;
			case tuesday:
				System.out.println("你输入输入的是星期二");
				break;
			case wednesday:
				System.out.println("你输入输入的是星期三");
				break;
			case thursday:
				System.out.println("你输入输入的是星期四");
				break;
			case friday:
				System.out.println("你输入输入的是星期五");
				break;
			case staturday:
				System.out.println("你输入输入的是星期六");
				break;
			case sunday:
				System.out.println("你输入输入的是星期日");
				break;
			default:
				System.out.println("出现错误");
		}
	}
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

注意,在switch中,不能使用枚举类名称,这是错误的,因为编译器会根据switch中days的类型来判定每个枚举类型,在case中必须直接给出与days相同类型的枚举选项,而不能再有类型。

5.也可以在enum中描述自己的一些属性或方法
	必须在enum类中第一行 描述一下枚举的样子 最后需要分号结束;
			monday(name:"星期一",index:1);		
		可以定义自己的属性
			private String name;
			private int index;
		类创建的过程中  帮我们创建枚举类型的对象
		需要给枚举类型提供对应样子的构造方法  构造方法只能private修饰  可以重载
			private Day(){} //构造方法
			private Day(String name,int index){
				this.name = name;
				this.index = index;
			}
			
			public String getName(){ //普通方法
				return this.name;
			}
			public void setName(String name){
				this.name = name;
			}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

枚举可以添加普通方法、静态方法、抽象方法、构造方法
Java 虽然不能直接为实例赋值,但是它有更优秀的解决方案:为 enum 添加方法来间接实现显示赋值。

创建 enum 时,可以为其添加多种方法,甚至可以为其添加构造方法。

注意一个细节:如果要为enum定义方法,那么必须在enum的最后一个实例尾部添加一个分号。此外,在enum中,必须先定义实例,不能将字段或方法定义在实例前面。否则,编译器会报错。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/505692
推荐阅读
相关标签
  

闽ICP备14008679号