黑马程序员12_枚举

时间:2023-02-18 20:10:52

枚举


 

知识点一:枚举概述

枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错。枚举可以让编译器在编译时就可以控制源程序中填写的非法值,普通变量的方式在开发阶段无法实现这一目标。

枚举特点

1、用enum定义枚举类默认继承了java.lang.Enum类而不是继承了Object类。其中java.lang.Enum类实现了java.lang.Serializable和java.lang.Comparable两个接口

2、枚举类的构造函数只能使用private访问修饰符,如果省略了其构造器的访问控制符,则默认使用private修饰

3、枚举类的所有实例必须在枚举类中显式列出,否则这个枚举类将永远都不能产生实例。列出这些实例时,系统会自动添加public static final修饰,无需程序员显式添加。

陈潞的理解:枚举可理解为类,枚举元素可理解为类的对象。枚举元素相当于枚举的静态成员。


 

知识点二:简单的枚举及其常用方法

public class enumDemo1
{
	public static void main(String args[])
	{
	ColorEnum color1 = ColorEnum.RED;
	print(color1);//输出结果为:RED,即返回内部String()方法的值
	print(color1.name());//输出结果为:RED,即对象的名字
	print(color1.ordinal());//输出结果为0,即对象的角标
	print(color1.compareTo(ColorEnum.BLUE));//输出结果为:-2,即color1的角标-ColorEnum.BLUE的角标
	print(color1.getClass());//输出结果为:class enumDemo1$ColorEnum,即ColorEnum的类字节码
	print(ColorEnum.valueOf("RED"));//输出结果为:RED,根据传入的字符串参数得到枚举的对象实例,等同于print(ColorEnum.RED),等同于print(ColorEum.RED.toString())
	print(ColorEnum.values());//输出结果为[LenumDemo1$ColorEnum;@affc70,返回的是枚举各个对象组成的字符串数组
	print(ColorEnum.values().length);//输出结果为3
	}
	public enum ColorEnum
	{
		RED,//可理解为ENUM的对象
		GREEN,
		BLUE;
	}
	public static void print(Object o)
	{
		System.out.println(o);
	}
}

  


 

知识点三:带构造方法的枚举。

1、枚举元素必须位于枚举体中的最开始部分,枚举元素列表的后要有分号与其他成员分隔。把枚举中的成员方法或变量等放在枚举元素的前面,编译器报告错误。

2、构造方法必须定义成私有的

3、枚举元素MON和MON()的效果一样,都是调用默认的构造方法。

4、new静态类的对象,即枚举的元素,就会调用枚举的相应构造方法

public enum ColorEnum
	{
		RED(10),//可理解为ENUM的对象
		GREEN(20),
		BLUE(5);
		ColorEnum(int sec){System.out.println(“调用了构造函数”)}
	}

  


 

知识点四:带抽象方法的枚举

枚举元素是由枚举的匿名子类实现抽象方法new出来的,即

RED {子类{子类代码块}}

例子:

public enum ColorEnum
	{
		RED {
			public ColorEnum getNext() {
				return null;
			}
		},
		GREEN {
			public ColorEnum getNext() {
				return null;
			}
		},
		YELLOW{
			public ColorEnum getNext() {
				return null;
			}
		};
		public abstract ColorEnum getNext();
	}

  


 

知识点五:带属性的枚举

public enum ColorEnum
	{
		RED(10) {//10相当于RED的属性
			public ColorEnum getNext() {
				return null;
			}
		},
		GREEN(10) {
			public ColorEnum getNext() {
				return null;
			}
		},
		YELLOW(2) {
			public ColorEnum getNext() {
				return null;
			}
		};
		public abstract ColorEnum getNext();
		private int time;
		ColorEnum(int time){this.time = time;}
	}