强哥说Java--枚举类(二)

简介: 强哥说Java--枚举类(二)

4. Enum 类



java.lang.Enum类 是 Java 语言枚举类型的公共基类,我们使用enum关键字定义的枚举类,是隐式继承自Enum类的,下面我们来看一下Enum类的常用方法:


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


valueOf():可以把一个字符串转换为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”,如果不是,会抛出IllegalArguementException;


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


这 3 个方法使用起来比较简单,因此我们写在一个实例中,代码如下:


package com.caq.exception;
public class Test2 {
    public static void main(String[] args) {
        Test test1 = Test.man;
        System.out.println("调用 toString方法");
        System.out.println(test1.toString());
        System.out.println("调用values方法");
        Test[] values = Test.values();
        for (Test value : values){
            System.out.println(value);
        }
        System.out.println("调用values方法");
        Test test2 = Test.valueOf("man");
        System.out.println(test2);
    }
    enum Test{
        //使用enum关键字生成枚举类
        //1.枚举类内部提供多个对象,这些对象用逗号分隔开来
        //2.声明枚举类的属型
        //3.编写构造方法,为属型赋值
        //3.提供获得属型的Getter方法(封装里的知识)
        //1.
        man("男"),
        woman("女"),
        unknow("未知");
        //2.
        private final String sexName;
        //3.
        Test(String sexName){
            this.sexName=sexName;
        }
        public String getSexName() {
            return sexName;
        }
    }
}


运行结果:


调用 toString方法
man
调用values方法
man
woman
unknow
调用values方法
man


值得注意的是,当调用valuOf()方法时,我们传递的对象的“名字”,在枚举类中并不存在,此时会抛出运行时异常:IllegalArgumentException,实例如下:


package com.caq.exception;
public class Test2 {
    public static void main(String[] args) {
        Test test1 = Test.man;
        System.out.println("调用values方法");
        Test test2 = Test.valueOf("man1");
        System.out.println(test2);
    }
    enum Test{
        //使用enum关键字生成枚举类
        //1.枚举类内部提供多个对象,这些对象用逗号分隔开来
        //2.声明枚举类的属型
        //3.编写构造方法,为属型赋值
        //3.提供获得属型的Getter方法(封装里的知识)
        //1.
        man("男"),
        woman("女"),
        unknow("未知");
        //2.
        private final String sexName;
        //3.
        Test(String sexName){
            this.sexName=sexName;
        }
        public String getSexName() {
            return sexName;
        }
    }
}


运行结果:


调用values方法
Exception in thread "main" java.lang.IllegalArgumentException: No enum constant com.caq.exception.Test2.Test.man1
  at java.lang.Enum.valueOf(Enum.java:238)
  at com.caq.exception.Test2$Test.valueOf(Test2.java:12)
  at com.caq.exception.Test2.main(Test2.java:8)


5. 小结



枚举类就是一个可以表示枚举的类


当一个类的对象只有有限个、确定个的时候,我们就可以定义一个枚举类来存放这些对象。


使用枚举类可以规避编译器无法检测每个值的范围是否合法的问题。


使用enum关键字来定义枚举类。


所有通过enum关键字定义的枚举类都继承自java.lang.Enum类,要了解该类的常用方法的使用。

相关文章
|
5天前
|
Java 开发者
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
Java面试题:请解释内存泄漏的原因,并说明如何使用Thread类和ExecutorService实现多线程编程,请解释CountDownLatch和CyclicBarrier在并发编程中的用途和区别
10 0
|
5天前
|
安全 Java 开发者
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
Java面试题:什么是Java 15中的密封类以及其限制?还有哪些其他特性用于限制类继承的机制吗?
12 1
|
5天前
|
设计模式 存储 安全
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
Java面试题:设计一个线程安全的单例类并解释其内存占用情况?使用Java多线程工具类实现一个高效的线程池,并解释其背后的原理。结合观察者模式与Java并发框架,设计一个可扩展的事件处理系统
14 1
|
6天前
|
Java 调度
Calendar类在Java中的应用
Calendar类在Java中的应用
|
10天前
|
开发框架 Java Android开发
Java中的类反射与动态代理详解
Java中的类反射与动态代理详解
|
12天前
|
Java 数据安全/隐私保护
|
12天前
|
Java 数据安全/隐私保护
Java中的类继承与多态详解
Java中的类继承与多态详解
|
12天前
|
设计模式 Java
Java中的动态加载与卸载类
Java中的动态加载与卸载类
|
5天前
|
存储 运维 前端开发
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
Java面试题:什么是Java的异常处理机制?列举常见的异常类,并说明使用场景
15 0
|
5天前
|
安全 Java 数据处理
Java面试题:什么是Java中的Optional类及其使用场景?
Java面试题:什么是Java中的Optional类及其使用场景?
8 0