第六章 枚举

枚举

概念

枚举 : 对象是可数的确定的特殊类型

注意事项

  • 后面如果还有东西, 则需要;

  • 枚举类的构造器必须是私有的.

  • 枚举类型不能创建对象

  • 根据常量对象名获取对应的对象, 大小写敏感

enum TrafficSignal {
   //public static final TrafficSignal STOP = new TrafficSignal(60);
   //public static final TrafficSignal GO = new TrafficSignal(50);
   //public static final TrafficSignal CAUTION = new TrafficSignal();
   STOP(60), GO(50), CAUTION; // 后面如果还有东西, 则需要;

   private int seconds = 30;

   private TrafficSignal() {
  }

   // 枚举类的构造器必须是私有的.
   private TrafficSignal(int seconds) {
       this.seconds = seconds;
  }

   public int getSeconds() {
       return seconds;
  }

   public void setSeconds(int seconds) {
       this.seconds = seconds;
  }

   @Override
   public String toString() {
       return super.toString() + " " +
               "seconds=" + seconds +
               '}';
  }
}

public class EnumTest {

   public static void main(String[] args) {
       int n = Integer.parseInt(args[0]); // 把命令行参数的第一个字符串转换为int
       //new TrafficSignal(); // 枚举类型不能创建对象
       TrafficSignal ts = TrafficSignal.STOP; // 最直接获取对象方式
       System.out.println(ts);
       ts = TrafficSignal.valueOf("GO"); // 根据常量对象名获取对应的对象, 大小写敏感
       System.out.println(ts);
       System.out.println("********************************");
       TrafficSignal[] arr = TrafficSignal.values(); // 返回保存了所有枚举对象的数组
       ts = arr[n];
       System.out.println(ts);
       // ts究竟指向谁, 不确定 , 但是可以确定的是肯定指向3个对象中的一个.
       /*
       switch(变量) { 变量的数据类型是非long整数, 字符串, 枚举
           case 常量1 : 常量 : 字面量和被final修饰的量
           case 常量2 :
               ....
       }*/
       switch (ts) {
           case GO:
               System.out.println("绿灯行");
               break;
           case STOP:
               System.out.println("红灯停");
               break;
           case CAUTION:
               System.out.println("黄灯慢");
               break;
      }

枚举和switch

public enum Week {
   MON, TUE, WED, THU, FRI, SAT, SUN
}

public class WeekTest {

   //在TestWeek类中声明方法void printWeek(Week week),根据参数值打印相应的中文星期字符串。
   //然后以第2步中的枚举值调用printWeek方法,输出中文星期。
   public void printWeek(Week week) {
       switch (week) {
           case MON:
               System.out.println("星期一");
               break;
           case TUE:
               System.out.println("星期二");
               break;
           case WED:
               System.out.println("星期三");
               break;
           case THU:
               System.out.println("星期四");
               break;
           case FRI:
               System.out.println("星期五");
               break;
           case SAT:
               System.out.println("星期六");
               break;
           case SUN:
               System.out.println("星期日");
               break;
      }
  }

   //在main方法中从命令行接收一个1-7的整数(使用Integer.parseInt方法转换),
   // 分别代表星期一至星期日,打印该值对应的枚举值,
   public static void main(String[] args) {
       int n = Integer.parseInt(args[0]);
       if (n < 1 || n > 7) {
           System.out.println("星期数据不对!! 请重试");
           return;
      }
       Week[] arr = Week.values();
       Week week = arr[n - 1];
       System.out.println(week);
       WeekTest weekTest = new WeekTest();
       weekTest.printWeek(week);
  }
}
 
posted @   叶舞  阅读(312)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示