Java之枚举类

Posted 大凌轩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java之枚举类相关的知识,希望对你有一定的参考价值。

有时候,变量的取值只在一个有限的集合内。

例如:pizza的大小只有小、中、大和超大这四种尺寸。当然,可以将这些尺寸分别编码为1、2、3、4或者S、M、L、X。但这样存在着一定的隐患。在变量中很有可能保存的是一个错误的值(如0和m)。

针对这种情况,可以自定义枚举类型。枚举类型包括有限个命名的值。例如,

enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};

现在,可以声明这种类型的变量:

Size s = Size.MEDIUM;

Size类型的变量只能存储到这个类型声明中给定的某个枚举值,或者null值,null表示这个变量没有设置任何值。

 

 

下面是他的完整代码加运行结果:

package enums;

import java.util.Scanner;

/**
 * 详解请看:Java核心技术(原书第十版)p188-189
 * @author 大凌轩
 *
 */
public class EnumTest {

	public static void main(String[] args) {
		Scanner in=new Scanner(System.in);
		System.out.print("Enter a size:(SMALL,MEDIUM,LARGE,EXTRA_LARGE)");
		String input=in.next().toUpperCase();          //这里解释下此处toUpperCase方法,就是将你键盘输入的字母格式化为大写,下面有运行图
		Size size=Enum.valueOf(Size.class, input);
		System.out.println("size="+size);
		System.out.println("abbreviation="+size.getAbbreviation());
		if(size==Size.EXTRA_LARGE)
			System.out.println("Good job--you paid attention to the _.");
	}
}

enum Size{
	SMALL("S"),MEDIUM("M"),LAREG("L"),EXTRA_LARGE("XL");
	
	private Size(String abbreviation){this.abbreviation=abbreviation;}
	public String getAbbreviation(){return abbreviation;}
	
	private String abbreviation;
}

 

 

 

 下面为了自己以后方便理解,对其进行详细解释:

public enum Size{SMALL,MEDIUM,LARGE,EXTRA_LARGE};

实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要构造新对象。

因此,在比较两个枚举类型的值时,永远不要调用equals,而直接使用“= =”就可以了。

如果需要的话,可以在枚举类型中添加一些构造器、方法和域。当然,构造器只是在构造枚举常量的时候被调用。小面是一个示例:

public enum Size{
	SMALL("S"),MEDIUM("M"),LARGE("L"),EXTRA_LARGE("XL");
		
	private String abbreviation;

	private Size(String abbreviation){this.abbreviation=abbreviation;}
	public String getAbbreviation(){return abbreviation;}
}

所有的枚举类型都是Enum类的子类。它们继承了这个类的许多方法。其中最有用的一个是toString,这个方法能够返回枚举常量名。例如,Size.SMALL.toString()将返回字符串“SMALL”。

toString的逆方法是静态方法valueOf。例如,语句:

Size s = Enum.valueOf(Size.class,"SMALL");

将s设置成Size.SMALL。

每个枚举类型都有一个静态的values方法,它将返回一个包含全部枚举值的数组。例如,如下调用

Size[] values = Size.values();

返回包含元素Size.SMALL,Size.MEDIUM,Size.LARGE,Size.EXTRA_LARGE的数组。

ordinal方法返回enum声明中枚举常量的位置,位置从0开始计数。例如:Size.MEDIUM.ordinal()返回1。

 

代码其实是最能体现出知识内容的载体,上面的解释其实起不到太大的作用,你读懂了代码,也就知道个八九不离十了。

以上是我看《Core Java Volume I-Fundamentals》第十版的笔记

关于枚举的实现细节和原理也可参考《ThinkingInJava》第四版:http://blog.lichengwu.cn/java/2011/09/26/the-usage-of-enum-in-java/

以上是关于Java之枚举类的主要内容,如果未能解决你的问题,请参考以下文章

Java基础之细说枚举

Java enum(枚举)使用详解之四

java之枚举类

java之枚举和注解

Java 枚举类的基本使用

Java之枚举注解反射