java-枚举基础入门

    科技2024-04-20  12

    枚举入门

    枚举是jdk1.5引入的新特性,可以通过关键字enum来定义枚举类.

    枚举类时一种特殊的类.他和普通类一样可以使用构造器,定义成员变量和方法,也能实现一个或者多个接口,但是枚举类不能继承其他类.

    public enum Color{// 表示这是一个枚举类型,名字叫Color BLACK,WHITE// 表示这个枚举类型有两个固定的对象,一个叫BLACK,一个叫WHITE }

    枚举类型重写了toString方法,返回枚举对象的名字.

    反编译枚举类,从结果中可以看出:

    枚举也是一种类,同时韩式一个final修饰的类

    枚举类型都会默认继承一个父类型java.lang.Enum,这还是一个抽象的泛型类

    public abstract class Enum<E extend Enum<E>>{}

    枚举中所定义的对象,其实就是类里面的public static final 修饰的常量,并且这些常量会在静态代码块中做初始化

    枚举类型中海油一个默认的私有构造器,说明我们在外面并不能自己去创建枚举对象

    枚举类型中还有有默认添加进来的方法

    values() 方法,可以返回这个枚举类型的所有对象,返回类型是数组

    valueOf(String str) 方法,通过一个字符串可以返回枚举对象,这个字符串参数就是枚举对象的名字

    枚举类型会从父类中继承过来一些方法,例如

    String name() 返回这个枚举对象的名字

    int ordinal() 返回这个枚举对象的编号,默认从0开始

    意义

    当我们要使用的是固定个数的对象时可以使用枚举类型

    例如: 性别,钱的类型等等

    使用

    获取枚举对象的方式

    使用类名直接获取

    eg: Color c = Color.RED;

    使用valueOf方法

    eg: Color.valueOf(“RED”)

    使用反射

    Class c = Class.forName("com.briup.Color"); Enum e = Enum.valueOf(c,"RED");

    枚举中定义属性和方法

    在枚举中,除了可以指定对象的个数和名称之外,还可以定义属性和方法

    public enum Gender{ MALE,FEMALE; private String name; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } public void test(){ System.out.println("Gender test..."); } public static void print(String name){ System.out.println("hello "+name); } }

    注意: 枚举类型中的第一行代码,要求一定时指定枚举对象的个数和名字,同时最后面加分号;

    枚举中还可以定义自己的构造器

    public enum Gender{ MALE,FEMALE; private String name; private Gender(){ } private Gender(String name){ this.name = name; } @Override public String toString() { return "Gender{name="+name+"}"; } }

    枚举中的构造器,只能使用private修饰,或者不写修饰符,那么默认也是private,同时还可以构造器重载

    枚举中可以定义抽象方法,但是需要在定义每个枚举对象时,将抽象方法进行实现,因为枚举类型是final修饰的类,不可能有子类型来实现这个抽象方法

    枚举类型实现接口

    枚举类型已经有默认的父类型,我们就不能让它在继承其他父类了,但是我们可以让枚举类型实现指定的接口

    public enum Gender implements Action{ MALE,FEMALE; @Override public void run() { System.out.println("枚举中统一实现接口中的抽象方法"); } } interface Action{ void run(); }

    我们在枚举中实现方法时有两种,一种直接在枚举中统一实现,一种在每个对象中,分别实现

    Processed: 0.021, SQL: 8