`
麦田1990
  • 浏览: 72254 次
文章分类
社区版块
存档分类
最新评论

java学习笔记10--枚举

 
阅读更多

在JDK1.5之前,java可以有两种方式定义新类型:类和接口。对于大部分面向对象编程来说,这两种方法看起来似乎足够了,但是在一些特殊情况下,这些方法就不适合。例如,想定义一个Color类,它只能有Red、Green、Blue三种值,其他的任何值都是非法的,那么JDK1.5之前虽然可以构造这样的代码,但是要做很多的工作,也有可能带来各种不安全的问题。而JDK1.5之后引入的枚举类型(Enum)就能避免这些问题。

所谓的枚举就是规定好了指定的取值范围,所有的内容只能从指定的范围中取得。

使用简单类完成颜色的固定取值问题。

package com.itmyhome;

class Color{
	public static final Color colorRed =  new Color("红色");
	public static final Color colorGreen =  new Color("蓝色");
	public static final Color colorBlue =  new Color("绿色");
	private String name;
	public Color(String name){
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}
public class T {
	public static void main(String[] args) throws Exception{
		Color cRed = Color.colorRed;
		System.out.println(cRed.getName());
	}
}


此时,程序限定了所能取的对象的范围,所以达到了枚举的功能,以上是一种枚举的方式,在最早的java开发中因为没有枚举这种概念,所以有时候也使用接口表示。

interface Color{
	public static final int RED = 1;
	public static final int GREEN = 2;
	public static final int BLUE = 3;
}


定义一个枚举类型

在JDK1.5之后,引入了一个新的关键字类型 enum,可以直接定义枚举类型,格式如下:

【public】 enum 枚举类型名称{

枚举对象1,枚举对象2,.......枚举对象n;

}

使用enum关键字定义。

public enum Color {
	RED,GREEN,BLUE;
}

因为枚举已经指定好了范围,所以可以使用foreach 进行全部的输出,使用“枚举.values()”的形式取得全部的枚举内容。

package com.itmyhome;

enum Color {
	RED,GREEN,BLUE;
}

public class T {
	public static void main(String[] args) throws Exception{
		for(Color c:Color.values()){
			System.out.println(c);
		}
	}
}


还可以直接将内容在switch语句上使用。

package com.itmyhome;

enum Color {
	RED, GREEN, BLUE;
}

public class T {
	public static void main(String[] args) throws Exception{
		for(Color c:Color.values()){
			print(c);
		}
	}
	public static void print(Color color){
		switch(color){
			case RED:{
				System.out.println("红色");
				break;
			}
			case GREEN:{
				System.out.println("绿色");
				break;
			}
			case BLUE:{
				System.out.println("蓝色");
				break;
			}
			default:{
				System.out.println("未知颜色");
			}
		}
	}
}


Enum

从前面已经清楚的知道,使用enum关键字可以定义一个枚举,实际上此关键字表示的是 java.lang.Enum类型,即:使用enum声明的枚举类型,就相当于定义一个类,而此类则默认继承java.lang.Enum类。

java.lang.Enum类的定义如下:

public abstract class Enum<E extends Enum<E>>
extends Object 
implements Comparable<E>, Serializable

此类定义的时候使用了泛型机制,而且实现了Comparable接口以及Serializable接口,证明此中类型是可以比较,可以被序列化的。

枚举类的主要方法

Enum类的构造方法:

protected  Enum(String name, int ordinal) 


构造方法中接收两个参数,一个表示枚举的名字,一个表示枚举的序号。

for(Color c:Color.values()){
			System.out.println(c.name()+"----"+c.ordinal());
		}


希望可以使用一些文字表示颜色的信息,则可以按照最早的Color类的形式,在枚举中定义属性及自己的构造方法,但是一旦定义有参构造之后,在声明枚举对象的时候就必须明确的调用构造方法,并传递参数。

package com.itmyhome;

enum Color {
	RED("红色"), GREEN("绿色"), BLUE("蓝色");   //传入参数
	private String name;
	private Color(String name){  //定义构造方法
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

public class T {
	public static void main(String[] args) throws Exception{
		for(Color c:Color.values()){
			System.out.println(c.ordinal()+"----"+c.name()+"----"+c.getName());
		}
	}
}


java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型

分享到:
评论

相关推荐

    java笔记.zip

    尚硅谷康师傅java学习笔记。 、2020-4-5 java学习笔记 2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 ...

    Java学习笔记7.0

    《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...

    java学习笔记 初学者必读

    5.3. 初始化数组 5-10 5.4. 多维数组 5-10 5.5. 数组拷贝 5-10 6. 五•对象和类 6-11 6.1. 面向对象与面向过程 6-11 6.2. 对象的概念 6-12 6.3. 成员变量和局部变量 6-12 6.4. 成员方法 6-12 6.5. This关键字 6-13 ...

    java学习笔记(11) 第11 章 - 枚举和注解(csdn)————程序.pdf

    java学习笔记(11) 第11 章 - 枚举和注解(csdn)————程序

    Java 学习笔记-手机书 Rev.2 (080411)

    此份所有内容皆出自我的偶像:林信良(良葛格)的Java 学习笔记,网址: http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/JavaGossip.htm&lt;br&gt;本人只是将其整理成适合手机阅读的格式。 &lt;br&gt;此为第二...

    观看韩顺平学习整理java的笔记到异常

    帮助大家复习java基础知识其中有 hashCode 2 toString 2 finalize 2 用已学知识做出简单的房屋出租系统 3 类方法使用注意事项和细节讨论 4 main()方法 4 代码块 4 代码块使用注意事项和细节 5 单例模式 6 final...

    Java学习笔记(必看经典)

    本书是作者近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API等均进行了...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

     《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 作译者 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 ...

    J2SE技术总结-Java学习精华教程-电子书

    本书内容非常全面,涵盖了《Java编程思想》、《Java学习笔记》等书籍所有知识要点,并结合作者自己经验总结而编写,内容丰富程度胜过一切书籍 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的...

    Java JDK 5.0学习笔记(第二部分)

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API...

    达内 CoreJava老师笔记汇总

    CoreJava DAY10 主方法,静态导入,包装类,枚举 62 CoreJava DAY11 内部类 70 CoreJava DAY12 集合 List 78 CoreJava DAY13 集合 Set 85 CoreJava DAY14 集合 Map 92 CoreJava DAY15 异常、断言 98 CoreJava DAY16 ...

    良葛格Java JDK 5.0学习笔记

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API...

    Java学习笔记

    概念和原理方面:线程、类库API(文档)、泛型、枚举、注解、反射、网络等 JAVA中最大的特点是面向对象,面向对象的概念最早出现在70年代,由Smaltalk(IBM)提出来的。 JAVA语言跨平台执行,它必须先编译后解释执行,...

    恒生电子JAVA笔试试题-Thinking-In-Java-Notes:ThinkinginJava学习笔记

    Java》学习笔记 [TOC] 阅读计划 章节列表 对象导论 一切都是对象 操作符 控制执行流程 初始化与清理 访问权限控制 复用类 多态 接口 内部类 持有对象 通过异常处理错误 字符串 类型信息 泛型 数组 容器深入研究 Java...

    MLDn学习笔记 —— JDK新特性(枚举)

    NULL 博文链接:https://zisefeiniao.iteye.com/blog/382689

    JavaLearnProject:Java 学习笔记测试用例

    Java 学习笔记测试用例 如果没有特别说明,测试代码默认放在 test 目录下面 模块及功能介绍 Module 功能 spring-aop Spring AOP 面向切面编程 spring-ioc Spring IOC 控制反转(类[对象]交由Spring容器管理) ...

    整理后java开发全套达内学习笔记(含练习)

    Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...

    Java JDK 5.0学习笔记(第一部分)

    本书是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API...

    JavaSE学习笔记.docx

    Java学习笔记 初识Java编程、Java基本数据类型、运算符、流程控制、数组、方法、面相对象、Java常用类库、集合、异常处理、多线程、IO流、网络编程、Java的反射机制、泛型、枚举、注解、配置文件操作、发送邮件、...

Global site tag (gtag.js) - Google Analytics