java 28 - 5 JDK5的新特性 之 枚举的使用
上一章,自定义了枚举类,超级麻烦。。
所以,JAVA给了一个枚举类:类 Enum<E extends Enum<E>>
注意事项
- 定义枚举类要用关键字enum
- 所有枚举类都是Enum的子类
- 枚举类的第一行上必须是枚举项,最后一个枚举项后的分号是可以省略的,但是如果枚举类有其他的东西,这个分号就不能省略。建议不要省略
- 枚举类可以有构造器,但必须是private的,它默认的也是private的。枚举项的用法比较特殊:枚举(“”);
- 枚举类也可以有抽象方法,但是枚举项必须重写该方法
- 枚举在switch语句中的使用
enum的方法:
除了下面的方法,还有一个方法在API中找不到的:
values(); : 每个枚举类都具有这个方法,遍历枚举类的所有美剧值。
// values()
// 此方法虽然在JDK文档中查找不到,但每个枚举类都具有该方法,它遍历枚举类的所有枚举值非常方便
Direction2[] dirs = Direction2.values();
for (Direction2 d2 : dirs) {
System.out.println(d2);
System.out.println(d2.getName());
}
| 方法摘要 | ||
|---|---|---|
protected Object |
clone() 抛出 CloneNotSupportedException。 |
|
int |
compareTo(E o)比较此枚举与指定对象的顺序。 |
|
boolean |
equals(Object other)当指定对象等于此枚举常量时,返回 true。 |
|
protected |
finalize()枚举类不能有 finalize 方法。 |
|
Class<E> |
getDeclaringClass()返回与此枚举常量的枚举类型相对应的 Class 对象。 |
|
int |
hashCode()返回枚举常量的哈希码。 |
|
String |
name()返回此枚举常量的名称,在其枚举声明中对其进行声明。 |
|
int |
ordinal()返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。 |
|
String |
toString()返回枚举常量的名称,它包含在声明中。 |
|
static
|
valueOf(Class<T> enumType, String name)返回带指定名称的指定枚举类型的枚举常量。 |
|
第一版:
public enum Direction01 {
FRONT, BENIND, LEFT, RIGHT;
}
第二版:
public enum Direction02 {
FRONT("前"), BENIND("后"), LEFT("左"), RIGHT("右");
private String name;
private Direction02(String name) {
this.name = name;
}
public String getname() {
return name;
}
}
第三版:
public enum Direction03 {
FRONT("前") {
@Override
public void show() {
System.out.println("前");
}
},
BEHIND("后") {
@Override
public void show() {
System.out.println("后");
}
},
LEFT("左") {
@Override
public void show() {
System.out.println("左");
}
},
RIGHT("右") {
@Override
public void show() {
System.out.println("右");
}
}, ;
private String name;
private Direction03(String name) {
this.name = name;
}
public String getname(String name) {
return name;
}
public abstract void show();
}
测试类:
public class DirectionDemo {
public static void main(String[] args) {
// 打印第一版本
Direction01 d1 = Direction01.FRONT;
System.out.println(d1); // FRONT
// 打印第二版本
Direction02 d2 = Direction02.FRONT;
System.out.println(d2); // FRONT
System.out.println(d2.getname()); // 前
// 打印第三版本 (枚举在switch语句中的使用)
Direction03 d3 = Direction03.FRONT;
switch (d3) {
case FRONT:
System.out.println("选择了前");
break;
case BEHIND:
System.out.println("选择了后");
break;
case LEFT:
System.out.println("选择了左");
break;
case RIGHT:
System.out.println("选择了右");
break;
default:
break;
}
}
}
java 28 - 5 JDK5的新特性 之 枚举的使用的更多相关文章
- java 28 - 4 JDK5的新特性 之 枚举的概述和自定义枚举类
枚举 枚举概述 是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内.举例:一周只有7天,一年只有12个月等. 回想单例设计模式:单例类是一个类只有一个实例 那么多例类就是一个类有多个实例,但 ...
- Java基础和JDK5.0新特性
Java基础 JDK5.0新特性 PS: JDK:Java Development KitsJRE: Java Runtime EvironmentJRE = JVM + ClassLibary JV ...
- java 28 - 6 JDK7的新特性
JDK7的新特性: 二进制字面量 数字字面量可以出现下划线 switch 语句可以用字符串 泛型简化 异常的多个catch合并 try-with-resources 语句 二进制字面量 JDK7开始, ...
- java 28 - 7 JDK8的新特性 之 接口可以使用方法
JDK8的新特性: http://bbs.itcast.cn/thread-24398-1-1.html 其中之一:接口可以使用方法 interface Inter { //抽象方法 public a ...
- JDK5的新特性之 增强for
package cn.itcast.day19.foreach; import java.util.ArrayList; import java.util.Collection; import j ...
- Java JDK5.0新特性
JDK5.0新特性 虽然JDK已经到了1.8 但是1.5(5.0)的变化是最大的 1. 增强for循环 foreach语句 foreach简化了迭代器 作用: 对存储对象的容器进行迭代 (数组, co ...
- Javaweb学习笔记——(七)——————myexlipse基本使用、jdk5.0新特性及反射讲解
1.debug调试模式: *使用这种模式,调试程序(看到程序运行停止在这一行) -显示出来行号 -双击左边,出现一个圆点,表示设置了一个断点 *使用debug as方式,运行程序 -特使是否进入到调试 ...
- Day07 jdk5.0新特性&Junit&反射
day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装M ...
- JDK5的新特性:泛型、可变参数、静态导入
数组可以在创建的时候就指定存放的数据类型,这样放入不同类型的时候就会发生编译错误. 而集合却可以存储多种不同类型,这样的话如果是遍历的时候在集合中装了好多不同的数据类型的时候,十分容易发生类型转换错误 ...
随机推荐
- SAP用户权限解剖及自修改
通常BASIS会使用PFCG做权限管理,时你保存时会产生一个系统外的profile name,记得SU01时用户有profile 和role两栏位吗?它们的关系如何呢? 首先明白几个概念.1.acti ...
- php强制转换类型和CMS远程管理插件的危险
远程管理插件是十分受WordPress站点管理员欢迎的工具,它们允许用户同时对多个站点执行相同的操作,如,更新到最新的发行版或安装插件.然而,为了实现这些操作,客户端插件需要赋予远程用户很大的权限.因 ...
- [SharePoint] SharePoint 错误集 3
阅读目录 1. workflow 流程走不下去,报 workflow fails to run 的错误 2. 安装sharepoint prerequisit总是在web server (iis)这步 ...
- Round in Oracle/VBA
VBA的 Round采用的是银行家算法(rounds to the nearest even number) Round(1.5) = 2 Round(0.5) = 在Oracle中实现银行家算法 S ...
- sqlite之WAL模式
链接 概述 在3.7.0以后,WAL(Write-Ahead Log)模式可以使用,是另一种实现事务原子性的方法. WAL的优点 在大多数情况下更快 并行性更高.因为读操作和写操作可以并行. 文件IO ...
- leetcode 第188题,我的解法,Best Time to Buy and Sell Stock IV
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255) ...
- AndroidAnnotations简单示例
@EActivity(R.layout.activity_main) public class MainActivity extends Activity { @ViewById(R.id.textV ...
- 通过JavaScript原型链理解基于原型的编程
零.此文动机 用了一段时间的Lua,用惯了Java C++等有Class关键字的语言,一直对Lua的中的面向对象技术感到费解,一个开源的objectlua更是看了n遍也没理解其中的原理,直到看到了Pr ...
- Asp.net中实现同一用户名不能同时登录(单点登录)
Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...
- ORACLE查看表空间对象
ORACLE如何查看表空间存储了那些数据库对象呢?可以使用下面脚本简单的查询表空间存储了那些对象: SELECT TABLESPACE_NAME AS TABLESPACE_NAME ...