Java基础 -- 07枚举enum

本文介绍了Java中的枚举类型,包括枚举的定义、用法、枚举变量、switch应用、枚举的方法以及枚举在单例模式和模板设计模式中的应用。枚举是一种强大的类型,用于定义一组相关的常量,它们可以拥有数据成员和方法,且在switch语句中使用灵活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

枚举:

枚举的定义:

枚举的用法:

枚举变量

枚举的switch应用

枚举的方法

枚举有数据成员的

枚举的运用场景:

枚举的小示例


从jdk5开始,java开始支持枚举。

枚举:

一组常量组织在一起,用花括号{}括起来,然后给它命名个类型,就是枚举。

枚举是类类型,只不过不能用new操作符,可以为枚举提供构造函数,添加数据/方法成员,甚至可以实现接口。

每个枚举常量都是所属枚举类型的对象,因此,如果为枚举提供了构造函数,那么每个枚举常量都会调用一次这个构造函数,并且每个枚举常量都有其自己的实例数据成员。

枚举的超类是 java.lang.Enum 类

enum关键字不过是个语法糖,枚举定义 enum MyEnum{} 可以理解为 public class MyEnum extends java.lang.Enum{}


枚举的定义:

enum Grade { // 枚举类型Grade 无构造函数的

    Perfect,Good,Common,Bad // 拥有的四个常量,默认是 public static final

}
enum Grade2 { // 枚举类型Grade2 有构造函数的

      Perfect(), Good(), Common(), Bad();

      private int score; // 每种枚举常量值的分数

      Grade2(){ } // 构造函数
      Grade2(int score) { this.score = score; } // 构造函数

      public int getScore(){
          return score;
      }

      public void setScore(int score){
          this.score = score;
      }
}

枚举的用法:

  • 枚举变量

Grade g = Grade.Perfect;//枚举g的值只能是枚举常量中的某一个

  • 枚举的switch应用

switch(g){ // 枚举可以用在switch语句中

      case Perfect:
      case Good:
      case Common:
              System.out.println("考试及格!");
              break;

      case Bad:
              System.out.println("考试不及格!");
              break;
}

  • 枚举的方法

for ( Grade e : Grade.values() ) // 枚举的values()的方法,返回枚举中的所有要素
     System.out.println(e);

System.out.println( Grade.Bad.ordinal()); // 输出枚举值的下标索引,从0开始,这里输出3
System.out.println( Grade.Good.compareTo(Grade.Bad)); // 计算两个枚举值的下标索引的差值
System.out.println( Grade.Good.equals(Grade.Bad)); // 同枚举类型下,比较两个枚举值是否相同

  • 枚举有数据成员的

Grade2.Perfect.setScore(90); //有构造函数的枚举:每个常量都是一个对象,都有自己的数据成员
System.out.println(Grade2.Perfect.getScore()); //输出90

Grade2.Good.setScore(80);
System.out.println(Grade2.Good.getScore()); //输出80


枚举的运用场景:

枚举是类类型,每一个枚举元素都是对象。我们想限定有限个该类类型的对象,并且每个对象的数据和行为都是各司其意的(有点同一个接口不同实现类的味道,实现多态),这时用枚举类型就很适合。

或者更简单的对枚举的一种认识:我们自己写了个类,这个类里面有数据成员,方法成员。不过我们不用new来实例化这个类,而是enum定义的时候,就定义好了几个枚举值常量,每个常量都是这个类的对象,而且是public static final修饰的对象。每个对象都有自己的数据成员私有副本,还可以实现出不同版本的方法成员。

  • 单例模式
  • 模板

枚举的小示例

点击学习枚举小示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值