JDK5.0新特性--枚举
2006-08-27 12:11
225 查看
枚举,JDK5.0的新特性之一,呵呵,貌似最近经常碰上它的新特性,诸如泛型、自动拆箱与装箱(autoboxing)等等,下面就谈谈我粗浅的理解,:)。
1.如何定义一个枚举类
首先给出个枚举的最简单的代码:public enum People{CMTobby,Cindyelf}(一般最好都用大写,如CMTOBBY),这样我们就定义了一个枚举类了,那么这行代码到底是什么意思咧?我当初也是看了半天不知所云,后来看了一下别人的代码,才明白这段代码大概是这么个含义:定义了一个叫People的类,这个类呢有两个域,名字分别是CMTobby和Cindyelf(而且还应该是public final static final的,这个是我猜的^_^),它们都是People型别的,本例中的People类不带构造方法,因此CMTobby和Cindyelf都是调用的默认的构造方法,当然我们也可以添加自定义的构造方法,如下面所示:
enum People{
CMTobby("gg"),Cindyelf("mm");
private People(String sex){
this.sex=sex;
}
private String sex="";
}
这里有一点是要值得注意的:构造方法必须是private类型的,再就是看一下枚举的方式(如CMTobby(“gg”)),如果不带参数则是调用不带参数的构造方法,此时要确保你有这样的一个构造方法,:),像本例中如果写成CMTobby,Cindyelf;则会报错了,因为没有一个不带参数的构造方法了。
2.如何使用一个枚举类
Ok,定义完了之后我们如何使用枚举类咧?前面提到过枚举类的构造方法都是private类型的,因此是不可能通过new的方式来创建一个枚举类的对象的。实际上一个枚举类一经创建,那么它的实例或者说是对象个数就已经确定了,比如上例,就可能有CMTobby和Cindyelf这两个实例了,当然你可以创建新的reference指向它们,但是People类型的对象却只能是2个了,你再不能创建新的People对象了哦。
如果我们想把CMTobby赋值给另外一个People类型的reference可以有如下两种方式:
a. People test=People.CMTobby;
b. People test=(People)Enum.valueOf(People.class,"Cindyelf");
注意第二种方式,第二个参数必须是”CMTobby”或者”Cindyelf”,否则会发生运行时异
常的。
3.说明
所有的枚举类的父类都是java.lang.Enum,虽然并没有显式地标识出来,但是我们可以通过下面的代码来证实:System.out.println(People.class.getSuperclass().getName()),它的输出将是:java.lang.Enum,实际上People类隐式的继承自Enum<People>。
1.如何定义一个枚举类
首先给出个枚举的最简单的代码:public enum People{CMTobby,Cindyelf}(一般最好都用大写,如CMTOBBY),这样我们就定义了一个枚举类了,那么这行代码到底是什么意思咧?我当初也是看了半天不知所云,后来看了一下别人的代码,才明白这段代码大概是这么个含义:定义了一个叫People的类,这个类呢有两个域,名字分别是CMTobby和Cindyelf(而且还应该是public final static final的,这个是我猜的^_^),它们都是People型别的,本例中的People类不带构造方法,因此CMTobby和Cindyelf都是调用的默认的构造方法,当然我们也可以添加自定义的构造方法,如下面所示:
enum People{
CMTobby("gg"),Cindyelf("mm");
private People(String sex){
this.sex=sex;
}
private String sex="";
}
这里有一点是要值得注意的:构造方法必须是private类型的,再就是看一下枚举的方式(如CMTobby(“gg”)),如果不带参数则是调用不带参数的构造方法,此时要确保你有这样的一个构造方法,:),像本例中如果写成CMTobby,Cindyelf;则会报错了,因为没有一个不带参数的构造方法了。
2.如何使用一个枚举类
Ok,定义完了之后我们如何使用枚举类咧?前面提到过枚举类的构造方法都是private类型的,因此是不可能通过new的方式来创建一个枚举类的对象的。实际上一个枚举类一经创建,那么它的实例或者说是对象个数就已经确定了,比如上例,就可能有CMTobby和Cindyelf这两个实例了,当然你可以创建新的reference指向它们,但是People类型的对象却只能是2个了,你再不能创建新的People对象了哦。
如果我们想把CMTobby赋值给另外一个People类型的reference可以有如下两种方式:
a. People test=People.CMTobby;
b. People test=(People)Enum.valueOf(People.class,"Cindyelf");
注意第二种方式,第二个参数必须是”CMTobby”或者”Cindyelf”,否则会发生运行时异
常的。
3.说明
所有的枚举类的父类都是java.lang.Enum,虽然并没有显式地标识出来,但是我们可以通过下面的代码来证实:System.out.println(People.class.getSuperclass().getName()),它的输出将是:java.lang.Enum,实际上People类隐式的继承自Enum<People>。
相关文章推荐
- 黑马程序员_学习笔记:11) Jdk5.0新特性:增强for循环、可变参数(...)、静态导入、枚举:关键字 enum、自动拆装箱、泛型
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记
- JDK5.0新特性-枚举
- 枚举 JDK5.0的新特性之一
- 黑马程序员--基础--第一篇--JDK5.0新特性泛型 静态倒入 自动拆装箱 不定项参数 增强for如循环 枚举
- 黑马程序员_java jdk5.0新特性和枚举的学习笔记
- JDK5.0新特性(3)-枚举(Type safe enums)
- Day 07 debug调试 junit单元测试 jdk5.0新特性 泛型,枚举,静态导入,拆装箱,增强for,可变参数 反射
- 心得19--JDK新特性-可变参数、枚举
- 赵雅智_Java JDK 5.0 枚举
- JDK5.0新特性---泛型
- JDK4.0 ,JDK5.0,JDK6.0,JDK7.0,JDK8.0的新特性
- Java--枚举(Enum)JDK1.5新特性
- JDK5.0 特性-线程 Condition
- J2SE5.0新特性之枚举类型
- 黑马程序员--12--collections类与JDK5.0新特性
- Java5.0新特性05-枚举(enum)
- java学习之JDK5.0特性
- Java基础加强-JDK 5.0 新特性
- JDK5.0的新特性