java新特性之枚举

一、多例模式

多例模式实现方式一

package cn4;

public class MultiInstance {

	//提供有限个实例化对象
	public static final MultiInstance FRONT = new MultiInstance();
	public static final MultiInstance BEHIND = new MultiInstance();
	public static final MultiInstance LEFT = new MultiInstance();
	public static final MultiInstance RIGHT = new MultiInstance();

	//构造方法私有化
	private MultiInstance(){

	}

}
package cn4;

public class Test {
	public static void main(String[] args) {
		MultiInstance front = MultiInstance.FRONT;
		MultiInstance behind = MultiInstance.BEHIND;
		MultiInstance left = MultiInstance.LEFT;
		MultiInstance right = MultiInstance.RIGHT;

		System.out.println(front);
		System.out.println(behind);
		System.out.println(left);
		System.out.println(right);

	}
}

[email protected]

[email protected]

[email protected]

[email protected]

多例模式实现方式二

package cn4;

public class MultiInstance2 {

	//提供有限个实例化对象
	public static final MultiInstance2 FRONT = new MultiInstance2("前");
	public static final MultiInstance2 BEHIND = new MultiInstance2("后");
	public static final MultiInstance2 LEFT = new MultiInstance2("左");
	public static final MultiInstance2 RIGHT = new MultiInstance2("右");

	private String name;

	//构造方法私有化
	private MultiInstance2(String name){
		this.name = name;
	}

	public String getName(){
		return this.name;
	}

}
package cn4;

public class Test2 {
	public static void main(String[] args) {
		MultiInstance2 front = MultiInstance2.FRONT;
		MultiInstance2 behind = MultiInstance2.BEHIND;
		MultiInstance2 left = MultiInstance2.LEFT;
		MultiInstance2 right = MultiInstance2.RIGHT;

		System.out.println(front);
		System.out.println(behind);
		System.out.println(left);
		System.out.println(right);

		System.out.println(front.getName());
		System.out.println(behind.getName());
		System.out.println(left.getName());
		System.out.println(right.getName());
	}
}

[email protected]

[email protected]

[email protected]

[email protected]4f

多例模式实现方式三

package cn4;

public abstract class MultiInstance3 {

	//提供有限个实例化对象
	public static final MultiInstance3 FRONT = new MultiInstance3("前"){

		@Override
		public void show() {
			System.out.println("这是前面哦");

		}

	};
	public static final MultiInstance3 BEHIND = new MultiInstance3("后"){

		@Override
		public void show() {
			System.out.println("这是后面哦");
		}

	};
	public static final MultiInstance3 LEFT = new MultiInstance3("左"){

		@Override
		public void show() {
			System.out.println("左这是边哦");
		}

	};
	public static final MultiInstance3 RIGHT = new MultiInstance3("右"){

		@Override
		public void show() {
			System.out.println("这是后边哦");
		}

	};

	private String name;

	//构造方法私有化
	private MultiInstance3(String name){
		this.name = name;
	}

	public String getName(){
		return this.name;
	}

	public abstract void show();

}
package cn4;

public class Test3 {
	public static void main(String[] args) {
		MultiInstance3 front = MultiInstance3.FRONT;
		MultiInstance3 behind = MultiInstance3.BEHIND;
		MultiInstance3 left = MultiInstance3.LEFT;
		MultiInstance3 right = MultiInstance3.RIGHT;

		System.out.println(front);
		System.out.println(behind);
		System.out.println(left);
		System.out.println(right);

		System.out.println(front.getName());
		System.out.println(behind.getName());
		System.out.println(left.getName());
		System.out.println(right.getName());

		front.show();
		behind.show();
		left.show();
		right.show();

	}
}

[email protected]

[email protected]

[email protected]

[email protected]

这是前面哦

这是后面哦

左这是边哦

这是后边哦

但是如果我们写多例模式也这样实在是太麻烦了。jdk为我们提供了枚举。

根据多例模式实现一对应的枚举一

package cn4;

public enum Color {
	RED,GREEN,BLUE;
}
package cn4;

public class ColorTest1 {
	public static void main(String[] args) {
		Color red = Color.RED;
		Color green = Color.GREEN;
		Color blue = Color.BLUE;

		System.out.println(red);
		System.out.println(green);
		System.out.println(blue);
	}

}

RED

GREEN

BLUE

根据多例模式实现二对应的枚举二

package cn4;

public enum Color2 {
	RED("红"),GREEN("绿"),BLUE("蓝");

	private String name;
	private Color2(String name){
		this.name = name;
	}

	public String getName(){
		return this.name;
	}

}
package cn4;

public class ColorTest2 {
	public static void main(String[] args) {
		Color2 red = Color2.RED;
		Color2 green = Color2.GREEN;
		Color2 blue = Color2.BLUE;

		System.out.println(red);
		System.out.println(green);
		System.out.println(blue);

		System.out.println(red.getName());
		System.out.println(green.getName());
		System.out.println(blue.getName());
	}

}

RED

GREEN

BLUE

绿

根据多例模式实现三对应的枚举三

package cn4;

public enum Color3 {
	RED("红"){
		@Override
		public void show() {
			System.out.println("这是红色");
		}},GREEN("绿"){

			@Override
			public void show() {
				System.out.println("这是绿色");
			}},BLUE("蓝"){

				@Override
				public void show() {
					System.out.println("这是蓝色");
				}};

	private String name;
	private Color3(String name){
		this.name = name;
	}

	public String getName(){
		return this.name;
	}

	public abstract void show();
}

RED

GREEN

BLUE

绿

这是红色

这是绿色

这是蓝色

二、枚举的注意事项

定义枚举类要用关键字enum。

所有枚举类密度是Enumerate的子类。

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

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

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

枚举可以在switch语句中的使用。

三、枚举类的几个常用方法

int compareTo(E o)

String name()

int ordinal()

String toString()

<T> T valueOf(Class<T> type,String name)

values()

此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便

package cn4;

public enum Color {
	RED,GREEN,BLUE;
}
package cn4;

public class ColorDemo {
	public static void main(String[] args) {
		//int compareTo(E o) 比较此枚举与指定对象的顺序
		Color red = Color.RED;
		Color green = Color.GREEN;
		Color blue = Color.BLUE;
		System.out.println(red.compareTo(red));//0
		System.out.println(red.compareTo(green));//-1
		System.out.println(blue.compareTo(red));//2

		System.out.println("-------------------------");

		//String name() 返回此枚举常量的名称,在其枚举声明中对其进行声明。
		System.out.println(Color2.RED.name());//RED
		System.out.println(Color2.GREEN.name());//GREEN
		System.out.println(Color2.BLUE.name());//BLUE

		System.out.println("-------------------------");

		//int ordinal() 返回枚举常量的序数
		System.out.println(Color3.RED.ordinal());//0
		System.out.println(Color3.GREEN.ordinal());//1
		System.out.println(Color3.BLUE.ordinal());//2

		System.out.println("-------------------------");

		//String toString() 返回枚举常量的名称
		System.out.println(Color3.RED.toString());//RED
		System.out.println(Color3.GREEN.toString());//GREEN
		System.out.println(Color3.BLUE.toString());//BLUE

		System.out.println("-------------------------");

		//<T> T valueOf(Class<T> type,String name) 返回带指定名称的指定枚举类型的枚举常量
		Color color = Enum.valueOf(Color.class, "RED");
		System.out.println(color);//RED

		System.out.println("-------------------------");
		//values() 获取指定枚举类的枚举数组
		Color[] colors = Color.values();
		for (Color c : colors) {
			System.out.println(c);//RED GREEN BLUE
		}

	}

}

0

-1

2

-------------------------

RED

GREEN

BLUE

-------------------------

0

1

2

-------------------------

RED

GREEN

BLUE

-------------------------

RED

-------------------------

RED

GREEN

BLUE

时间: 2024-08-04 06:21:31

java新特性之枚举的相关文章

JAVA学习-Java新特性(泛型、枚举、Annotation)

所谓的Java新特性现在都是指从JDK 1.5之后开始的,例如,在前面已经学习过两个新特性:switch支持String判断(JDK 1.7提供的).自动装箱和拆箱.可变参数.foreach.静态导入.泛型.枚举.Annotation. 对于所有的新特性,我的个人建议:有些新特性你今天一定是不知道怎么用的,我们今天只是来看一下这些语法,至于使用方面,慢慢来观察. 1.可变参数(理解) 如果说现在有这样一个要求,要求实现整数的加法操作,并且方法可以接收任意多个整型数据一起实现加法操作. 如果按照传

主流的单元测试工具之-JAVA新特性-Annotation 写作者:组长 梁伟龙

1:什么是Annotation?Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一个新特性. 主流的单元测试工具之-JAVA新特性-Annotation - groupthreetogether - group博客 2:元数据的简单介绍: @Before:使用了该元数据的方法在每个测试方法执行之前都要执行一次. @After:使用了该元数据的方法在每个测试方法执行之后要执行一次.

JAVASE课程 第一章 第四讲方法,数组,java新特性

作用: 1.可以了解方法的申明和使用 2.可以了解数组的引用传递 3.可以了解java新特性对数组的支持 一 方法的申明和使用 1 方法的定义 方法就是一段可重复调用的代码块. 2 方法的定义格式 a public static 返回值类型 方法名称(类型参数1,类型参数2...){ 方法主体: 程序语句 [return 表达式;] } b 在本节定义的方法,因为其可以直接使用主方法调用,所以将方法声明处加上public static两个关键字 c 注意 1/ 如果返回值类型上写的是void,则

java新特性之可变参数

public class NewDemo01 {     public static void main(String[] args) {         System.out.print("No args(fun()):");         fun();         System.out.print("\n one args(fun()):");         fun(1);         System.out.print("\n five a

java 28 - 5 JDK5的新特性 之 枚举的使用

上一章,自定义了枚举类,超级麻烦.. 所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>> 注意事项 定义枚举类要用关键字enum 所有枚举类都是Enum的子类 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略.建议不要省略 枚举类可以有构造器,但必须是private的,它默认的也是private的.枚举项的用法比较特殊:枚举(""); 枚举类也可以有抽象方法,但是枚举项

主流的单元测试工具之-JAVA新特性-Annotation

写作者:组长 梁伟龙 1:什么是Annotation? Annotation,即“@xxx”(如@Before,@After,@Test(timeout=xxx),@ignore),这个单词一般是翻译成元数据,是JAVA的一个新特性. 2:元数据的简单介绍: @Before:使用了该元数据的方法在每个测试方法执行之前都要执行一次. @After:使用了该元数据的方法在每个测试方法执行之后要执行一次. 注意:@Before和@After标示的方法只能各有一个.这个相当于取代了JUnit以前版本中的

Java 新特性(5) - Java EE 5 新特性

Java EE 5 由 Java Community Process 通过 Java Specification Request 244 发布,这个 “总纲” JSR 指出了详细描述 Java EE 5 中各种技术的其他规范(参见 参考资料).Sun Microsystems 的 Bill Shannon 领导一个专家组制订了这个规范,这个专家组包括从 IT 行业重量级人物到个人专家的 31 位成员.以前的 Java EE 版本有: J2EE 1.2(于 1999 年 12 月发布):这是第一个

Java 新特性(7) - Java EE 7 新特性

http://www.ibm.com/developerworks/cn/java/j-lo-javaee7/ 新特性主要集中在: 1. 提高开发人员的生产力 2. 加强对 HTML5 动态可伸缩应用程序的支持 3. 进一步满足苛刻的企业需求这三个方面 新增组件 WebSocket 1.0.JSON Processing 1.0.JAX-RS 2.0.JSF 2.2 和 JMS 2.0.

Java新特性 5、6、7、8、9、10、11、12、13

项目地址:https://github.com/hepengju/java-new-features项目目标:1. 列举Java5-13版本的关键新特性2. 对每个新特性进行全面的阐述与代码示例 原文地址:https://www.cnblogs.com/hepengju/p/11595102.html