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
}
时间: 2024-10-09 22:39:30

JDK5.0新特性-枚举的相关文章

Day07 jdk5.0新特性&Junit&反射

day07总结 今日内容 MyEclipse安装与使用 JUnit使用 泛型 1.5新特性 自动装箱拆箱 增强for 静态导入 可变参数方法 枚举 反射 MyEclipse安装与使用(yes) 安装MyEclipse 先安装了JDK ? MyEclipse介绍 ? MyEclipse是Eclipse的一个插件: MyEclipse是需要花钱的: MyEclipse官网不在欢迎中国人登录: ? MyEclipse使用 ? 1 创建项目 选择工作空间: 工作空间路径不能有空格和中文: 工作空间以班名

day07 MyEclipse 安装 jdk5.0 新特性

1.myeclipse的安装和使用 * eclipse:是一个免费的开发工具    * myeclipse:是一个收费的插件,破解myeclipse,        ** 安装目录的要求: 不能有中文和空格        ** 安装完成之后,选择一个工作空间 ,这个工作空间不能有中文和空格    * 破解myeclipse        ** 运行run.bat文件,但是运行之前,必须要安装jdk,通过配置环境变量 * myeclipse的使用        * 创建一个工程          

Java JDK5.0新特性

JDK5.0新特性 虽然JDK已经到了1.8 但是1.5(5.0)的变化是最大的 1. 增强for循环 foreach语句 foreach简化了迭代器 作用: 对存储对象的容器进行迭代 (数组, collection, map) 1> 格式 增强for循环括号里写两个参数 第一个是声明一个变量 第二个就是需要迭代的容器 for( 元素类型 变量名 : Collection集合 & 数组 ) { ... } 2> 增强for循环和传统for循环的区别 a. 增强for循环在使用时 必须要

JDK5.0新特性

JDK5中新增了很多新的java特性,利用这些新语法可以帮助开发人员编写出更加高效.清晰,安全的代码. 这些新特性主要有:1.静态导入2.自动装箱/拆箱3.增强for循环4.可变参数5.枚举6.泛型7.元数据 1.静态导入静态导入用于简化程序对静态属性和方法的调用 语法:Import static 包名.类名.静态属性|静态方法|*例如: import static java.lang.System.out import static java.lang.Math.* 2.自动装箱/拆箱自动装箱

JDK5.0新特性-泛型

泛型(重点) 什么是泛型? 对数据类型进行一个限定. 应用最多的地方是集合. 为什么要使用泛型? 1.提高我们程序安全性. 2.将运行阶段的问题在编译阶段解决. 3.不用进行类型强制转换 ----------------------------------------------- 我们学习泛型的目的:会使用集合上定义的泛型. 1.集合上泛型的基本使用. //Collection<E> //List<E> //Set<E> //它们的作用是限定集合中元素的类型. 我们可

JDK5.0新特性-自动装箱/拆箱

lJDK5.0的语法允许开发人员把一个基本数据类型直接赋给对应的包装类变量, 或者赋给 Object 类型的变量,这个过程称之为自动装箱. l自动拆箱与自动装箱与之相反,即把包装类对象直接赋给一个对应的基本类型变量. l典型应用: List list = new ArrayList(); list.add(1); int j = (Integer)list.get(0); package cn.itcast.autobox; import java.util.ArrayList; import

JDK5.0新特性-静态导入

静态导入(知道) 格式:import static 包名.类名.方法名(属性名); 在类中使用这个静态成员时可以不用类名.直接写方法名或属性名就可以. 静态导入缺点: 1.代码可读性下降. 2.由于方法名的重复,静态导入在一些特定的情况下会报错. --------------------------- package cn.itcast.staticdemo; import java.util.Arrays; import org.junit.Test; import static java.u

JDK5.0新特性-可变参数

可变参数: 格式 类型... 变量 本质上这个参数是一个数组. 优点:1.传参数时可以传递数组,也可以传递多个值. 2.可以不传递值. Arrays.asList()可以将数组转换成List集合. 注意:得到的是一个固定长度的List集合. 原因:是因为数组长度是固定的,这个集合是由数组转换成的. 为什么要将数组转换成集合? 集合中提供更丰富的操作. int[] arr = { 1, 2, 3 }; List list = Arrays.asList(arr); System.out.print

JDK5.0新特性-增强for循环

============== 增强for循环 它的底层实现就是使用Iterator. 什么样的容器可以使用增强for?-----------Iterable 增强for的缺点:只能进行遍历,不能进行在遍历过程中的操作. 增强for的格式 for(类型 引用:容器){ } -------------------------------------------- 关于对集合的遍历. List 1.Iterator 2.增强for 3.普通for 4.ListIterator Set 1.增强for