java [29] 枚举

枚举概述

是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。举例:一周只有7天,一年只有12个月等。

回想单例设计模式:单例类是一个类只有一个实例

那么多例类就是一个类有多个实例,但不是无限个数的实例,而是有限个数的实例。这才能是枚举类

定义枚举类:方向

版本一:

public class Direction {
	//创建实例
	public static final Direction FRANT = new Direction();
	public static final Direction BACKHIND = new Direction();
	public static final Direction LEFT = new Direction();
	public static final Direction RIGHT = new Direction();
	
	
	//构造私有禁止创建
	private Direction() {
		
	}
}

调用:

public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//私有不可创建
		//Direction d = new Direction();      //public static final Direction FRANT = new Direction();
		Direction d = Direction.FRANT;
		System.out.println(d);
		
	}

}

//输出
juli.Direction@7852e922

版本二:

public class Direction {
	//创建实例
	public static final Direction FRANT = new Direction("前");
	public static final Direction BACKHIND = new Direction("后");
	public static final Direction LEFT = new Direction("左");
	public static final Direction RIGHT = new Direction("右");
	
	
	//构造私有禁止创建
/*	private Direction() {
		
	}*/

	
	//加入成员变量并去掉无参构造
	private String name;
	private Direction(String s) {
		this.name = s;
	}
	public String getname() {
		return name;
	}
}
public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//私有不可创建
		//Direction d = new Direction();      //public static final Direction FRANT = new Direction();
		Direction d = Direction.FRANT;
		System.out.println(d);
		System.out.println(d.getname());
		
	}

}

//输出
juli.Direction@7852e922
前

版本三

package juli;


public abstract class Direction {
	//创建实例
	//创协该类的抽象方法
	public static final Direction FRANT = new Direction("前") {

		@Override
		public
		void run() {
			// TODO Auto-generated method stub
			System.out.println("frant");
			
		}};
	public static final Direction BACKHIND = new Direction("后") {

		@Override
		public
		void run() {
			// TODO Auto-generated method stub
			System.out.println("backhand");
			
		}};
	public static final Direction LEFT = new Direction("左") {

		@Override
		public
		void run() {
			// TODO Auto-generated method stub
			System.out.println("left");
			
		}
		
	};
	public static final Direction RIGHT = new Direction("右") {

		@Override
		public
		void run() {
			// TODO Auto-generated method stub
			System.out.println("right");
			
		}};
	
	
	//构造私有禁止创建
/*	private Direction() {
		
	}*/

	
	//加入成员变量并去掉无参构造
	private String name;
	private Direction(String s) {
		this.name = s;
	}
	public String getname() {
		return name;
	}
	//加入抽象方法
	public abstract void run();
	
}
public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//私有不可创建
		//Direction d = new Direction();      //public static final Direction FRANT = new Direction();
		Direction d = Direction.FRANT;
		System.out.println(d);
		System.out.println(d.getname());
		d.run();

	}

}

使用jdk自带的枚举类:

注意事项

定义枚举类要用关键字enum

所有枚举类都是Enum的子类

枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略

枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);

枚举类也可以有抽象方法,但是枚举项必须重写该方法

枚举在switch语句中的使用

版本一:

package juli;
/*通过jdk积功德枚举来做枚举类*/

public enum Direct {
	FRONT,BEHIND,LEFT,RIGHT;

}

调用:

public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Direct d = Direct.FRONT;
		System.out.println(d);

	}

}

版本二:

package juli;
/*通过jdk积功德枚举来做枚举类*/

public enum Direct {
	FRONT("前"),BEHIND("后"),LEFT("左"),RIGHT("右");
	private String name = null;
	private Direct(String name) {
		this.name=name;
		
	}
	public String getstring() {
		return name;
	}

}
public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Direct d = Direct.FRONT;
		System.out.println(d);
		System.out.println(d.getstring());

	}

}

//结果
FRONT
前

第三版:

package juli;
/*通过jdk积功德枚举来做枚举类*/

public enum Direct {
	FRONT("前"){

		@Override
		public void show() {
			// TODO Auto-generated method stub
			System.out.println("前");
			
		}},
	BEHIND("后"){

		@Override
		public void show() {
			// TODO Auto-generated method stub
			System.out.println("后");
			
		}},
	LEFT("左"){

		@Override
		public void show() {
			// TODO Auto-generated method stub
			System.out.println("左");
			
		}},
	RIGHT("右"){

		@Override
		public void show() {
			// TODO Auto-generated method stub
			System.out.println("右");
			
		}};
	private String name = null;
	private Direct(String name) {
		this.name=name;
		
	}
	public String getstring() {
		return name;
	}
	public abstract void show();

}
public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Direct d = Direct.FRONT;
		System.out.println(d);
		System.out.println(d.getstring());
		d.show();

	}

}
public class TEST {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Direct d = Direct.FRONT;
		/*System.out.println(d);
		System.out.println(d.getstring());
		d.show();*/
		switch (d) {
		case FRONT:
			System.out.println("你选择了前");
			break;
		case BEHIND:
			System.out.println("你选择了后");
			break;
		case LEFT:
			System.out.println("你选择了左");
			break;
		case RIGHT:
			System.out.println("你选择了右");
			break;
		}

	}

}
public class TEST {

	public static void main(String[] args) {
		//int compareTo(E o)
		//做比较
		Direct d1 = Direct.FRONT;
		Direct d2 = Direct.BEHIND;
		Direct d3 = Direct.LEFT;
		Direct d4 = Direct.RIGHT;
		System.out.println(d1.compareTo(d1));
		System.out.println(d1.compareTo(d4));
		System.out.println(d4.compareTo(d1));
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~");
		
		//String name()
		
		System.out.println(d1.name());
		System.out.println(d2.name());
		System.out.println(d3.name());
		System.out.println(d4.name());
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~");
		//int ordinal()
		System.out.println(d1.ordinal());
		System.out.println(d2.ordinal());
		System.out.println(d3.ordinal());
		System.out.println(d4.ordinal());
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~");
		//String toString()
		System.out.println(d1.toString());
		System.out.println(d2.toString());
		System.out.println(d3.toString());
		System.out.println(d4.toString());
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~");
		//<T> T valueOf(Class<T> type,String name)
		//Direct dd = Enum.valueOf(Direct.class, "FRANT");
		//System.out.println(dd.getstring());
		//System.out.println("~~~~~~~~~~~~~~~~~~~~~~~");
		//values() 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
		Direct[] dirs = Direct.values();
		for (Direct dir:dirs) {
			System.out.println(dir);
		}

		
	}

}

//输出
0
-3
3
~~~~~~~~~~~~~~~~~~~~~~~
FRONT
BEHIND
LEFT
RIGHT
~~~~~~~~~~~~~~~~~~~~~~~
0
1
2
3
~~~~~~~~~~~~~~~~~~~~~~~
FRONT
BEHIND
LEFT
RIGHT
~~~~~~~~~~~~~~~~~~~~~~~
FRONT
BEHIND
LEFT
RIGHT

猜你喜欢

转载自blog.csdn.net/qq_38125626/article/details/81873547