码迷,mamicode.com
首页 > 编程语言 > 详细

java 枚举

时间:2019-11-17 12:58:18      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:str   语法   清单   java   system   它的   结果   com   vat   

枚举是一种特殊的数据,它的取值是有限的,是可以枚举出来的,比如一年有四季、一周有七天。虽然使用类也可以处理这种数据,但枚举类型更为简洁、安全和方便。

 

枚举的好处体现在以下几方面。

  • 定义枚举的语法更为简洁。
  • 枚举更为安全。一个枚举类型的变量,它的值要么为null,要么为枚举值之一,不可能为其他值,但使用整型变量,它的值就没有办法强制,值可能就是无效的。
  • 枚举类型自带很多便利方法(如values、valueOf、toString等),易于使用。

 

基础使用:

public enum Size {
    SMALL, MEDIUM, LARGE
}

 

public class Main_5_4_1 {

    public static void main(String[] args) {

        // 使用Size
        Size size = Size.MEDIUM;

        Size size = Size.SMALL;
        // 枚举变量的toString方法返回其字面值,所有枚举类型也都有一个name()方法,返回值与toString()一样
        System.out.println(size.toString()); // SMALL
        System.out.println(size.name()); // SMALL

        Size size = Size.SMALL;
        // 枚举变量可以使用equals和==进行比较,结果是一样的
        System.out.println(size == Size.SMALL); // true
        System.out.println(size.equals(Size.SMALL));// true
        System.out.println(size == Size.MEDIUM);// false

        Size size = Size.MEDIUM;
        // 枚举值是有顺序的,可以比较大小。枚举类型都有一个方法int or-dinal(),表示枚举值在声明时的顺序,从0开始
        System.out.println(size.ordinal()); // 1

        Size size = Size.SMALL;
        // 枚举类型都实现了Java API中的Comparable接口,都可以通过方法compareTo与其他枚举值进行比较。比较其实就是比较ordinal的大小
        System.out.println(size.compareTo(Size.MEDIUM)); // -1

        // 枚举还可以用于switch语句
        onChosen(Size.MEDIUM);

        // 枚举类型都有一个静态的valueOf(String)方法,可以返回字符串对应的枚举值
        System.out.println(Size.SMALL==Size.valueOf("SMALL")); // true

        // 枚举类型也都有一个静态的values方法,返回一个包括所有枚举值的数组,顺序与声明时的顺序一致
        for (Size size : Size.values()) {
            System.out.println(size); // 输出为三行,分别是SMALL、MEDIUM、LARGE。
        }

    }

    static void onChosen(Size size) {
        switch (size) {
            case SMALL:
                System.out.println("chosen small");
                break;
            case MEDIUM:
                System.out.println("chosen medium");
                break;
            case LARGE:
                System.out.println("chosen large");
                break;
        }
    }
}

 

典型场景:

/**
 * Created by xc on 2019/11/17
 * 代码清单5-13 带有实例变量和方法的枚举类Size
 */
public enum Size {

    // 枚举值的定义需要放在最上面,枚举值写完之后,要以分号(;)结尾,然后才能写其他代码。
    SMALL("S", "小号"), MEDIUM("M", "中号"), LARGE("L", "大号");

    /**
     * 缩写
     */
    private String abbr;
    /**
     * 中文名称
     */
    private String title;

    private Size(String abbr, String title) {
        this.abbr = abbr;
        this.title = title;
    }

    public String getAbbr() {
        return abbr;
    }

    public String getTitle() {
        return title;
    }

    /**
     * 根据缩写返回对应的枚举值。
     *
     * @param abbr 缩写
     * @return
     */
    public static Size fromAbbr(String abbr) {
        for (Size size : Size.values()) {
            if (size.getAbbr().equals(abbr)) {
                return size;
            }
        }
        return null;
    }
}

 

上述代码定义了两个实例变量abbr和title,以及对应的get方法,分别表示缩写和中文名称;定义了一个私有构造方法,接受缩写和中文名称,每个枚举值在定义的时候都传递了对应的值;同时定义了一个静态方法fromAbbr,根据缩写返回对应的枚举值。需要说明的是,枚举值的定义需要放在最上面,枚举值写完之后,要以分号(;)结尾,然后才能写其他代码。这个枚举定义的使用与其他类类似,比如:

public class Main_5_4_2 {

    public static void main(String[] args) {
        Size s = Size.MEDIUM;
        System.out.println(s.getAbbr()); //输出M
        s = Size.fromAbbr("L");
        System.out.println(s.getTitle()); //输出“大号”
    }

}

 

参考:java编程逻辑5.4

java 枚举

标签:str   语法   清单   java   system   它的   结果   com   vat   

原文地址:https://www.cnblogs.com/ooo0/p/11875717.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!