博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猿来绘Java-42-枚举类的使用
阅读量:2094 次
发布时间:2019-04-29

本文共 4394 字,大约阅读时间需要 14 分钟。

枚举类的理解

如果类的对象只有一个,可以考虑使用单例模式,当需要定义一组常量时,强烈建议使用枚举类,枚举类的对象只有有限个,确定的。

举例如下:星期类、性别类、季节类、订单状态类、线程状态类等。

 

自定义枚举类

类似单例模式定义类的方式,我们自定义枚举类的时候考虑如下几种情况:

1.对象的属性:private final修饰,对象是常量了,属性那肯定也是常量

2.私有化类的构造器,并给对象属性赋值,类外无法调用构造器,也就是类外无法通过new的方式创建对象。类内部提供了多个对象了,类外不再提供构造对象的方法。

3.提供当前枚举类的多个对象:public static final的,公共的、

4.可提供get方法和toString()方法

 

//StatusTest.javapackage com.ylaihui.enumtest;class Status{    private final String name;    private Status(String name){        this.name = name;    }    public static final Status VALID = new Status("valid");    public static final Status NONVALID = new Status("nonvalid");    public String getName() {        return name;    }    @Override    public String toString() {        return "Status{" +                "name='" + name + '\'' +                '}';    }}public class StatusTest {    public static void main(String[] args) {        Status valid = Status.VALID;        System.out.println(valid);        Status nonvalid = Status.NONVALID;        System.out.println(nonvalid);    }}

 

enum定义枚举类

 

1.提供当前枚举类的对象,多个对象之间用","隔开,末尾对象";"结束

2.声明对象的属性:private final修饰

3.私有化类的构造器,并给对象属性赋值

4.可提供get方法和toString()方法

 

 

//EnumStatusTest.javapackage com.ylaihui.enumtest;enum EnumStatus{    VALID("valid"),    NONVALID("nonvalid");        private final String name;        private EnumStatus(String name){        this.name = name;    }    public String getName() {        return name;    }    //@Override    //public String toString() {    //    return "EnumStatus{" +    //            "name='" + name + '\'' +    //            '}';    //}}public class EnumStatusTest {    public static void main(String[] args) {        EnumStatus valid = EnumStatus.VALID;        EnumStatus nonvalid = EnumStatus.NONVALID;        System.out.println(valid); // VALID,调用了 Enum类中的toString方法        System.out.println(nonvalid); // NONVALID 调用了 Enum 类中的toString方法    }}

Enum类中常用的方法

 

values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常:IllegalArgumentException。

toString():返回当前枚举类对象常量的名称

 

//EnumMethodTest.javapackage com.ylaihui.enumtest;import java.util.Arrays;enum EnumStatus1{    VALID("valid"),    NONVALID("nonvalid");    private final String name;    private EnumStatus1(String name){        this.name = name;    }    public String getName() {        return name;    }    //@Override    //public String toString() {    //    return "EnumStatus{" +    //            "name='" + name + '\'' +    //            '}';    //}}public class EnumMethodTest {    public static void main(String[] args) {        //values() 方法        EnumStatus1[] values = EnumStatus1.values();        System.out.println(Arrays.toString(values));        for (int i = 0; i 

代码运行输出: 

[VALID, NONVALID]

VALID

NONVALID

Thread State: NEW

Thread State: RUNNABLE

Thread State: BLOCKED

Thread State: WAITING

Thread State: TIMED_WAITING

Thread State: TERMINATED

NEW

NEW

 

 

 

 

枚举类的对象可实现接口中的抽象方法

 

和普通 Java 类一样,枚举类可以实现一个或多个接口

若每个枚举值在调用实现的接口方法呈现相同的行为方式,则只要统一实现该方法即可。

若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法

 

 

一般性的做法:实现接口,并提供方法

 

//EnumStatus.javapackage com.ylaihui.enumabstract;interface Desc{    public void show();}enum Status implements Desc{    VALID("valid"),    NONVALID("nonvalid");    private final String name;    private Status(String name) {        this.name = name;    }    @Override    public void show() {        System.out.println("enum Status: " + this.name);    }}public class EnumStatus {    public static void main(String[] args) {        Status[] values = Status.values();        for (int i = 0; i < values.length; i++) {            System.out.println(values[i]);            values[i].show();        }    }}

枚举类中的每个对象都实现下抽象方法

//EnumStatus.javapackage com.ylaihui.enumabstractmethod;interface Desc{    public void show();}enum Status implements Desc{    VALID("valid"){        @Override        public void show() {            System.out.println("in object show : valid");        }    },    NONVALID("nonvalid"){        @Override        public void show() {            System.out.println("in object show : nonvalid");        }    };    private final String name;    private Status(String name) {        this.name = name;    }}public class EnumStatus {    public static void main(String[] args) {        Status[] values = Status.values();        for (int i = 0; i < values.length; i++) {            System.out.println(values[i]);            values[i].show();        }    }}

 

 

转载地址:http://wxuhf.baihongyu.com/

你可能感兴趣的文章
Struts2中的session、request、respsonse获取方法
查看>>
如何理解MVC模型
查看>>
SpringMVC中乱码解决方案
查看>>
SpringMVC中时间格式转换的解决方案
查看>>
post和get请求相关知识点
查看>>
关于try finally 中的return语句的问题
查看>>
RequestBody/ResponseBody处理Json数据
查看>>
springmvc请求参数获取的几种方法
查看>>
在eclipse中创建和myeclipse一样的包结构
查看>>
Java中的IO流
查看>>
java中的关键字
查看>>
如果某个方法是静态的,它的行为就不具有多态性
查看>>
Java 8系列之重新认识HashMap
查看>>
HashMap 、 ArrayList、String 重写了equals方法 而Object类(比如User)没有重写
查看>>
Servlet的生命周期
查看>>
Object中的getClass()返回的是当前运行的类
查看>>
加载驱动程序的方法
查看>>
深入理解java异常处理机制
查看>>
object类的基本方法
查看>>
回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议
查看>>