JDK5.0新特性-枚举
枚举
枚举是什么?
它就是一个特殊的java类.
类的定义
class 类名{}
接口的定义
interface 接口名{}
枚举的定义
enum 枚举名{}
示例
public enum Demo1{} 也会生成一个class文件.
我们对其进行反编译.
定义到我们的class文件所在目录下 执行 javap Demo1
得到的结果
public final class Demo1 extends java.lang.Enum<cn.itcast.enumdemo.Demo1> {
static {};
public static Demo1[] values();
public static Demo1 valueOf(java.lang.String);
}
枚举它是一个java类,它继承了java.lang.Enum这个类.
枚举有什么用?
我们在开发中,有些数据必须被限定在某个范围内取值,不可以超出这个范围,那么这时就可以使用枚举.
比我们传统的代码书写简单.
------------------------------------------------------------
枚举的语法
枚举类也是一种特殊形式的Java类。
枚举类中声明的每一个枚举值代表枚举类的一个实例对象。
与java中的普通类一样,在声明枚举类时,也可以声明属性、方法和构造函数,但枚举类的构造函数必须为私有的(这点不难理解)。
若枚举类只有一个枚举值,则可以当作单态设计模式使用。
注意:在枚举中可以声明方法,属性,构造方法.构造方法必须private。
如果枚举中只有枚举值,最后一个枚举值后面可以不写;结束符.
如果有了其它成员,必须在最后一个枚举值加上";".
1.构造方法必须private,可以重载.
2.在枚举中声明属性,声明方法.
---------------------------------------------------
1:枚举默认就是abstract的,不可以实例化。
2:枚举中可以拥有abstract抽像方法。
3:枚举的所有成员,都默认是public static final类型的。且必须要第一行开始声明。必须在,(逗号)分开。
4:所有的枚举,默认都是java.lang.Enum。
5:Enum类不但是所有枚举的公共的基类,还是一个工具类。
enum ------它是用于声明枚举类的.
Enum ------java中的一个类,它代表所有枚举的父类.
Enumeration----相当于Iterator 遍历集合
--------------------------------------
枚举类中可以声明abstract方法.
如果枚举类中存在抽象方法,对于每一个枚举值必须对这些抽象方法进行重写.
-------------------------------------------------------------------------------
枚举的方法.
1.枚举类中自带
values()-----得到枚举类中的所有枚举值
valueOf()------
2.枚举类从java.lang.Enum类继承的.
name方法---得到枚举值的字符串表现形式.
ordinal() ----得到枚举值的序号
valueOf(Class c,String name)将一个字符串转换成指定枚举类型的枚举值
----------------------------------------------------
枚举知识点掌握
1.枚举在什么时候使用,怎样定义枚举.
2.枚举中可以包含什么内容
3.枚举中常用的方法.
1
package cn.itcast.enumdemo; public class Demo4 { // 提高阅读性,提高安全性 public static void main(String[] args) { Employee e = new Employee("张三", 1000, Role.BOSS); } } // 声明一个员工类 class Employee { private String name; private double salary; // 员工有角色.对于我们的程序,员工的角色有三种 BOSS MANAGER WORKER public Role role; public Employee(String name, double salary, Role role) { super(); this.name = name; this.salary = salary; this.role = role; } } enum Role{ BOSS,MANAGER,WORKER } //上面和下面是相等的 // class Role { // // private Role() { // } // // public static final Role BOSS = new Role(); // public static final Role MANAGER = new Role(); // public static final Role WORKER = new Role(); // // }
在枚举中可以声明方法,属性,构造方法.构造方法必须private
package cn.itcast.enumdemo; public class Demo5 { public static void main(String[] args) { // EnumDemo.A; } } // 创建一个枚举 enum EnumDemo { // 枚举值. A { @Override public void print() { // TODO Auto-generated method stub } }, B { @Override public void print() { // TODO Auto-generated method stub } }, C { @Override public void print() { // TODO Auto-generated method stub } }; // 上面的每一个枚举值,代表的是EnumDemo类的一个对象. // 对于枚举值我们可以直接使用枚举名.枚举值.本质上是因为它是一个static修饰的. // 声明属性 private int id; // 构造方法. EnumDemo() { } EnumDemo(String name) { } // 声明方法 public void show() { } // 可以存在抽象方法. public abstract void print(); }
枚举的方法.
package cn.itcast.enumdemo; import java.util.Arrays; import org.junit.Test; public class Demo8 { // 从父类java.util.Enum继承的方法. // name方法 @Test public void demo1() { String name = EnumDemo1.A.name(); System.out.println(name); } @Test // ordinal() public void demo2() { int index = EnumDemo1.A.ordinal(); System.out.println(index); } @Test // valueOf---将一个字符串转换成指定枚举类型的枚举值 public void demo3() { EnumDemo1 ed = Enum.valueOf(EnumDemo1.class, "A"); System.out.println(ed==EnumDemo1.A); } //枚举类中自带两个方法. @Test //values() public void demo4(){ EnumDemo1[] eds=EnumDemo1.values(); System.out.println(Arrays.toString(eds)); } @Test //valueOf public void demo5(){ EnumDemo1 ed=EnumDemo1.valueOf("A"); System.out.println(ed); } } enum EnumDemo1 { A, B, C }