文档章节

java基础---->枚举

小强斋太
 小强斋太
发布于 2016/11/09 20:05
字数 816
阅读 2
收藏 0

1、枚举的概念

多例设计:一个类只能产生有限多个实例化对象,那么枚举的功能实际上就属于这种功能的实现,JDK 1.5之后增加了新的关键字:enum。

范例:定义一个枚举类

enum Color {

	RED, GREEN, BLUE;

}

public class EnumDemo01 {

	public static void main(String args[]) {

		Color c = Color.RED;

		System.out.println(c);

	}

};

2、enum关键字和Enum类

enum Color {

	RED, GREEN, BLUE;

}

public class EnumDemo02 {

	public static void main(String args[]) {

		for (Color c : Color.values()) {

			System.out.println(c.ordinal() + " --> " + c.name());

		}

	}

};
枚举通过enum关键字定义,定义的枚举就相当于一个类继承了Enum类。

3、定义属性及方法

使用enum定义了一个枚举之后也可以像普通类那样定义属性和方法,包括构造方法,但是一定要注意的是,所有的构造方法一定是private。否则报错 Illegal modifier for the enum constructor; only private is permitted.
enum Color {

	RED("红色"), GREEN("绿色"), BLUE("蓝色");

	private Color(String title) {

		this.setTitle(title);

	}

	private String title;

	public void setTitle(String title) {

		this.title = title;

	}

	public String getTitle() {

		return this.title;

	}

}

public class EnumDemo03 {

	public static void main(String args[]) {

		for (Color c : Color.values()) {

			System.out.println(c.ordinal() + " --> " + c.name() + " --> "
					+ c.getTitle());

		}

	}

};
在一般的开发中完全可以通过类的设计来达到枚举的功能。

4、实现接口   

枚举本身也可以实现接口,但是需要注意的是,一旦一个枚举实现了接口之后,枚举中的每个对象都必须分别的实例化这些接口中提供的抽像方法。
interface Info {

	public String getColorInfo();

}

enum Color implements Info {

	RED("红色") {

		public String getColorInfo() {

			return this.getTitle();

		}

	},
	GREEN("绿色") {

		public String getColorInfo() {

			return this.getTitle();

		}

	},
	BLUE("蓝色") {

		public String getColorInfo() {

			return this.getTitle();

		}

	};

	private Color(String title) {

		this.setTitle(title);

	}

	private String title;

	public void setTitle(String title) {

		this.title = title;

	}

	public String getTitle() {

		return this.title;

	}

}

public class EnumDemo04 {

	public static void main(String args[]) {

		for (Color c : Color.values()) {

			System.out.println(c.ordinal() + " --> " + c.name() + " --> "
					+ c.getColorInfo());

		}

	}

};

5、定义抽象方法

在枚举中还可以定义抽象方法,但是与实现接口一样的是,每一个枚举对象都要分别实现此方法。
enum Color implements Info {

	RED("红色") {

		public String getColorInfo() {

			return this.getTitle();

		}

	},
	GREEN("绿色") {

		public String getColorInfo() {

			return this.getTitle();

		}

	},
	BLUE("蓝色") {

		public String getColorInfo() {

			return this.getTitle();

		}

	};

	private Color(String title) {

		this.setTitle(title);

	}

	private String title;

	public void setTitle(String title) {

		this.title = title;

	}

	public String getTitle() {

		return this.title;

	}

	public abstract String getColorInfo();

}

public class EnumDemo05 {

	public static void main(String args[]) {

		for (Color c : Color.values()) {

			System.out.println(c.ordinal() + " --> " + c.name() + " --> "
					+ c.getColorInfo());

		}

	}

};

6、枚举的应用

枚举的最大特点实际上是限制了一个类的取值范围,例如:在设置习惯年别的时候,只能是男或女,那么此时应用枚举是最合适的地方。
enum Sex {

	MALE("男"), FEMALE("女");

	private String name;

	private Sex(String name) {

		this.name = name;

	}

	public String toString() {

		return this.name;

	}

}

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 EnumDemo06 {

	public static void main(String args[]) {

		System.out.println(new Person("张三", 20, Sex.MALE));

	}

};
但是通过其他的代码也可以满足此种要求,所以枚举在开发中是否使用并不是绝对的。

7、枚举与switch语句

switch语句,case分支条件后面只能是int,char或者枚举类型
public enum Animal {

dog,cat,pig;

static Animal getValue(String  animal)

{

        return  valueOf(animal.toLowerCase());

}

}
switch
public class Client {

        public void caseAnimal(String animal) {

               switch(Animal.getValue(animal)) {

               case  dog:

                       System.out.println("thisis a dog");

                       break;

               case  pig:

                       System.out.println("thisis a pig ");

                       break;

               case  cat:

                       System.out.println("thisis a cat");

                       break;

 

               default:

                       System.out.println("idon't know what is this!");

                       break;

               }

        }

 

        public static void main(String[] args) {

               new Client().caseAnimal("dog");

 

        }

}

 

本文转载自:http://www.cnblogs.com/xqzt/archive/2012/07/29/5637278.html

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
你所需要的java提升篇大总结

java基础篇深入解析大总结 java基础(一) 深入解析基本类型 java基础(二) 自增自减与贪心规则 java基础(三) 加强型for循环与Iterator java基础(四) java运算顺序的深入解析 java基础(五) Str...

sihailoveyan
04/25
0
0
一份关于 Java、Kotlin 与 Android 的学习笔记

JavaKotlinAndroidLearn 这是一份关于 Java 、Kotlin 、Android 的学习笔记,既包含对基础知识点的介绍,也包含对一些重要知识点的源码解析,笔记的大纲如下所示: Java 重拾Java(0)-基础知...

叶应是叶
08/08
0
0
java编程新手入门学习的基础语法

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰
05/28
0
0
Java高级部分笔记-------Java5.0的新特性

静态导入 1.1 JDK 1.5 增加的静态导入语法用于导入类的某个静态属性或方法。使用静态导入可以简化程序对类静态属性和方法的调用。 1.2 语法:Import static 包名.类名.静态属性|静态方法|* ...

查封炉台
2014/04/21
0
0
Java中枚举的线程安全性及序列化问题

来源:微信公众号 ,原创: Hollis --枚举是如何保证线程安全的 要想看源码,首先得有一个类吧,那么枚举类型到底是什么类呢?是enum吗?答案很明显不是,enum就和class一样,只是一个关键字...

Java填坑之路
08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java并发备忘

不安全的“先检查后执行”,代码形式如下: if(条件满足){ //这里容易出现线程安全问题//doSomething}else{//doOther} 读取-修改-写入 原子操作:使用CAS技术,即首先从V中读取...

Funcy1122
今天
0
0
SpringBoot2.0 停机

最近新建了个SpringBoot2.0的项目,因为原来一直使用的是传统的Tomcat部署war包的形式,所以这次SpringBoot内置Tomcat部署jar包的时候遇到了很多问题。其中一个就是因为没有外置的Tomcat容器...

Canaan_
昨天
0
1
Confluence 6 外部参考

一个外部参考的意思是任何站点链接到你 Confluence 的实例。任何时候当 Confluence 的用户单击这个外部链接的时候,Confluence 可以记录这次单击为参考。 在默认的情况下,外部链接的参考链接...

honeymose
昨天
0
0
Android中的设计模式之抽象工厂模式

参考 《设计模式解析》 第十一章 Abstract Factory模式 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式 《Android源码设计模式解析与实战》第6章 创...

newtrek
昨天
0
0
Redis | 地理空间(GEO)的一个坑

Redis的地理空间(Geo)是个好东西,轻轻松松的就可以把地图描点的问题处理了, 最近却遇到一个坑...Redis采用的Msater-Slave模式, 运用GEORADIUS在salve读取对应的数据,新增了从节点但是从不返...

云迹
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部