`
trjianjianjiao
  • 浏览: 1911 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

java基础之枚举类型

    博客分类:
  • java
阅读更多

一、 初识java枚举类型
      枚举类型enum是指由一组固定的常量组成合法值的类型。例如一周七天、一年四季,java的枚举是在jdk1.5中引入的,在那之前多采用一种叫int枚举模式的方式实现。
Int 枚举模式

public class Season {
	
	public static final int SPRING = 1;
	
	public static final int SUMMER = 2;
	
	public static final int AUTUMN = 3;
	
	public static final int WINTER = 4;
	
}


Java枚举类型

public enum Season {
	SPRING,SUMMER,AUTUMN,WINTER
}



枚举类型相vs. int模式
1、 枚举类型提供编译时期类型安全。
2、 枚举类型对于提供了很多有用的方法,例如静态方法values()获取所有实例的数组,valueof(…)可以通过实例的名称获取对应的实例。

二、 枚举的特点

     枚举没有可访问的构造器(private或者包访问级别),不能创建实例,只能使用声明过得枚举常量。
三、 枚举的底层实现

     我们可以通过enum{}新建一个枚举类型,那么底层是如何支持这种类型的呢?实际上创建enum时,编译器会为你生成一个继承自java.lang.Enum的类,它实现了Comparable和Serializable接口,必然也继承自Object,因此,你可以将enum当做是一个普通的类来使用,使用继承自Object 、Comparable和Serializable的方法,添加自己的字段和方法,也可以实现其它接口,不过由于java的单根结构,不能在继承自其它的基类。
PS:向enum中添加方法,需要在最后一个enum实例后添加分号。

来看一下java.lang.Enum 的提供的方法,出了从父类接口继承过来的方法外,还有三个自己的方法。

name() 返回你声明的枚举实例的名字,比如上面的SPRING,对应的name就是”SPRING”.
ordinal() 返回枚举实例在声明中的序号,严格按照声明的顺序,不过操作枚举实例时,最好不要依赖于ordinal。说不定哪天你改了声明的顺序,却忘记改对应的操作,会造成不必要的麻烦。
valueOf 这是Enum的静态方法,通过枚举的Class类型和枚举实例的name返回枚举实例。


因为enum天生就具备整数值的次序,你可以通过ordinal()获取,switch可以使用enum。

枚举类型的values()方法

所有的枚举类型都是java.lang.Enum的子类,你可以这样赋值Enum<Season> autumn = Season.AUTUMN; 但是枚举类型拥有的values()方法Enum中却没有,那这个方法是哪来的呢。values()方法是由编译器插入到enum定义中的static方法。 values()的作用是获取枚举实例的集合,那如果是Enum<Season> autumn,这样声明的又如何获取枚举实例的集合呢。Class<?>提供了getEnumConstants()方法获取枚举实例的数组 ,当Class的类型不是enum时返回null。
四、 使用枚举

      考虑这样一个需求,从控制台接收一个字符串表示星期几,然后根据这个参数输出当天的工作性质(工作日or周末),或者是输出当天的心情。怎么做呢?


方法一 if-else 或者switch。这显然是最笨拙,可扩展性最差的一种实现方式了。


方法二 实现一个继承结构,表示各个星期,然后在父类中实现一个静态工厂方法,根据输入的参数返回星期N的实例。在学会使用枚举前,我基本上都会选择这么做。


方法三 使用枚举。

public enum Week {
	
	Sunday(Work.Weekend) {
		@Override
		public void mood() {
			System.out.println("为什么假期不能长点呢?!");
		}
	},Monday(Work.Weekday) {
		@Override
		public void mood() {
			System.out.println("好困呀,假期综合症");
		}
	},TuesdayMonday(Work.Weekday) {
		@Override
		public void mood() {
			System.out.println("奋斗ing");
		}
	},WednsdayMonday(Work.Weekday) {
		@Override
		public void mood() {
			System.out.println("奋斗ing");
		}
	},ThursdayMonday(Work.Weekday) {
		@Override
		public void mood() {
			System.out.println("为什么明天才是周五?");
		}
	},FridayMonday(Work.Weekday) {
		@Override
		public void mood() {
			System.out.println("好期待呀,就要放假了");
		}
	},Saturday(Work.Weekend) {
		@Override
		public void mood() {
			System.out.println("放假就是爽啊就是爽啊");
		}
	};
	//与常量相关的数据
	private Work work;
	
	private Week(Work work){
		this.work = work;
	}
	
	//在枚举中添加方法
	public boolean needWork(){
		return this.work.needWork;
	}
	
	//在枚举中添加abstract方法,也可以单独实现一个接口。
	public abstract void mood();
	
	enum Work{
		Weekday(true),Weekend(false);
		
		private Work(boolean needWork){
			this.needWork = needWork;
		}
		
		private boolean needWork;
	}
}

 

分享到:
评论
2 楼 paladin1988 2012-10-23  
亲,一篇怎么够用,多写几篇吧。
1 楼 bitlanghen 2011-08-25  
女程序猿啊!
枚举得不错哈!

相关推荐

    java枚举类型说明

    ### Java枚举类型详解 #### 一、引言 在Java编程语言中,枚举(Enum)作为一种重要的数据类型,在程序设计中扮演着不可或缺的角色。本文将深入探讨Java枚举类型的特性和用法,并通过具体实例说明其优势所在。枚举...

    JAVA中的枚举类型2:高级特性.doc

    ### JAVA中的枚举类型2:高级特性 #### 概述 枚举类型是Java语言中一个非常实用且灵活的功能。通常情况下,我们将其用于表示一组固定的常量集合,如一周中的几天、颜色选项等。然而,Java中的枚举类型远不止于此。...

    Java 基础枚举.pdf

    在这个结构中,`EnumName` 是枚举类型的名称,`CONSTANT1, CONSTANT2, ..., CONSTANTN` 是枚举类型的常量。每个常量都是一个对象,它们自动继承自 `java.lang.Enum` 类,并且可以拥有自己的方法和属性。 例如,定义...

    大学课程讲义-Java基础-枚举&注解.pptx

    Java 基础知识点总览 - 枚举和注解 Java 中的枚举(enumeration)是一种特殊的数据类型,它可以表示有限的、固定的常量集。枚举类是一种特殊的类,它的对象是有限的、固定的和不可变的。 枚举的定义 在 Java 中,...

    枚举类型.pptx

    在Java中,枚举类型本质上是一个`final`类,自动继承`Enum`类,并且每个枚举常量都是该类的一个实例。编译器还会自动为枚举类型添加一些默认的方法,如`values()`和`valueOf()`等。 #### 七、枚举与接口 在某些...

    5-枚举类型、输入输出、处理

    枚举类型不仅限于整数,还可以自定义它们的基础类型,如`byte`、`int`、`long`等,并可以为每个成员指定特定的值: ```csharp public enum Color : byte { Red = 1, Green = 2, Blue = 3 } ``` 在输入输出(Input/...

    java基础学习课件ppt

    12. **枚举和注解**:理解枚举类型的作用和用法,以及注解在代码中的功能,如用于元数据、编译时和运行时处理。 13. **异常处理**:了解异常分类,学习如何编写try-catch-finally语句,以及如何自定义异常。 通过...

    枚举java基础知识点

    枚举Java基础知识点 Java中的枚举(Enumeration)是一种特殊的数据类型,它可以将一组固定的常量分组到一个枚举类型中,使得代码更加简洁、易读和维护。枚举的用法非常广泛,在Java中有多种使用方式,我们将逐一...

    java基础资料

    12. **枚举类型**:Java 5引入了枚举,用于定义一组固定的常量。 13. **泛型**:泛型允许在类、接口和方法中使用类型参数,增强了代码的类型安全性和重用性。 14. **Java SE (标准版)**:"老王java se"可能是指...

    Java基础案例教程(第2版)-教学设计.zip

    《Java基础案例教程(第2版)》是一本旨在教授初学者Java编程基础知识的教材,其教学设计旨在通过实例引导学生深入理解Java语言的核心概念。本教程覆盖了从环境搭建到程序设计的各个环节,旨在帮助学生建立起坚实的...

    java基础课程之一

    13. **枚举(Enum)**:枚举类型提供了一种安全的方式来表示固定集合中的值。 14. **泛型(Generics)**:泛型用于提高代码的类型安全,允许在类、接口和方法中使用类型参数。 15. **多线程(Multithreading)**:...

    Java基础教程PPT

    这份“Java基础教程PPT”是为初学者设计的,旨在帮助他们掌握Java编程的基础概念和技能。 首先,PPT可能会从Java的历史和特性开始讲解。Java由James Gosling在1995年推出,目标是“一次编写,到处运行”。它的主要...

    Java基础尚硅谷宋红康学习笔记

    【Java基础】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年发布。Java以其“一次编写,到处运行”的特性,成为跨平台应用开发的首选语言。Java的基础部分主要包括...

    Java编程基础教程:枚举与泛型的深入讲解

    使用场景及目标:本文旨在提升读者对于Java中枚举和泛型的理解与应用能力,包括掌握如何高效地定义和使用枚举类型,理解并实现泛型程序设计的技巧,从而写出更为强大、灵活的代码。 其他说明:阅读本篇文章需要具备...

    java基础 包含:Java入门 基础语法 JAVA 类和对象 JAVA 高级类 等等

    学习Java的基础语法,你需要掌握变量、数据类型、运算符、控制结构(如if语句、for循环、while循环)、方法定义与调用、数组等基本元素。此外,还需了解异常处理、包的使用、输入输出流等高级概念。编写Java代码通常...

    Java基础案例教程.rar

    "Java基础案例教程"是为初学者设计的教育资源,旨在帮助他们掌握Java编程的基础概念和实践技能。本教程出自知名教育机构黑马程序员,该机构以其深入浅出的教学方式和实用的案例著称。 在本教程中,你将学习到以下...

    Java 基础ppt.zip

    这份"Java基础ppt.zip"压缩包提供了一套完整的Java基础知识学习资源,专为初学者设计,旨在帮助那些对IT行业感兴趣的新手从零开始系统地掌握Java编程。 PPT中可能会涵盖以下关键知识点: 1. **Java简介**:解释...

    JAVA基础PPT下载

    这份"JAVA基础PPT下载"提供了一套基础的Java学习资源,适用于初学者,旨在引导新手进入Java的世界。以下是对这份教程可能包含的一些核心知识点的详细阐述: 1. **Java概述**:首先会介绍Java的历史背景,它的创始人...

    Java面向对象程序设计基本类型数组和枚举类型PPT教案学习.pptx

    Java是一种广泛使用的面向对象编程语言...综上所述,理解Java的基本数据类型、数组和枚举类型是编写高效、可靠的面向对象程序的基础。通过熟练掌握这些概念,开发者可以更好地组织和管理程序的数据,并实现复杂的功能。

Global site tag (gtag.js) - Google Analytics