zoukankan      html  css  js  c++  java
  • Java-枚举类

    Java-枚举类

    枚举类内可以直接写出所有实例。

    enum Weekday {
       SUN, MON, TUE, WED, THU, FRI, SAT;
    }

    不可能引用非枚举的值。

    enum类型的每个常量在JVM中只有一个唯一实例,可以直接用==比较:

    if (day == Weekday.FRI) { // ok!
    }
    if (day.equals(Weekday.SUN)) { // ok, but more code!
    }

    和一般的class有什么区别?

    • 总是继承自java.lang.Enum,且无法被继承

    • 无法通过new创建enum的实例

    • 定义的每个实例都是引用类型的唯一实例

    • 可以将enum类型用于switch语句

    public enum Color {
       RED, GREEN, BLUE;
    }

    编译器编译出的class文件:

    public final class Color extends Enum { // 继承自Enum,标记为final class
       // 每个实例均为全局唯一:
       public static final Color RED = new Color();
       public static final Color GREEN = new Color();
       public static final Color BLUE = new Color();
       // private构造方法,确保外部无法调用new操作符:
       private Color() {}
    }

    方法

    方法描述
    name() 返回常量名
    ordina() 返回定义的常量的顺序

    可以为enum编写构造方法、字段和方法

    字段强烈建议声明为final

    enum Weekday {
       MON(1, "星期一"), TUE(2, "星期二"), WED(3, "星期三"), THU(4, "星期四"), FRI(5, "星期五"), SAT(6, "星期六"), SUN(0, "星期日");

       public final int dayValue;
       private final String chinese;

       private Weekday(int dayValue, String chinese) {
           this.dayValue = dayValue;
           this.chinese = chinese;
      }
       public String getChiese(){
           return this.chinese;
      }

       @Override
       public String toString() {
           return this.chinese;
      }
    }

    Switch

    因为枚举类天生具有类型信息和有限个枚举常量,所以比intString类型更适合用在switch语句中:

    public class Main {
       public static void main(String[] args) {
           Weekday day = Weekday.SUN;
           switch(day) {
           case MON:
           case TUE:
           case WED:
           case THU:
           case FRI:
               System.out.println("Today is " + day + ". Work at office!");
               break;
           case SAT:
           case SUN:
               System.out.println("Today is " + day + ". Work at home!");
               break;
           default:
               throw new RuntimeException("cannot process " + day);
          }
      }
    }

    enum Weekday {
       MON, TUE, WED, THU, FRI, SAT, SUN;
    }

     

     

  • 相关阅读:
    java.io.file
    连线小游戏
    发票类型区分的正则表达式(仅区分普票专票)
    mybatis: No enum constant org.apache.ibatis.type.JdbcType."VARCHAR"
    bootstrap inputfile 使用-上传,回显
    微积分极限中一例
    oracle 查看表结构语句
    redis无法连接
    项目配置shiro原缓存注解失效
    bug 找不到或无法加载主类main.java.*
  • 原文地址:https://www.cnblogs.com/biwangwang/p/14263147.html
Copyright © 2011-2022 走看看