Java基础 -- 枚举enum

目录

枚举:

枚举的定义:

枚举的用法:

枚举的运用场景:

枚举的小示例:


从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; //每种枚举常量值的分数
      Grade( int score ){
           this.score = score;
      }
      Grade(){ }

      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修饰的对象。每个对象呢,就都有自己的数据成员私有副本,还可以实现出不同版本的方法成员。

  • 单例模式
  • 模板

枚举的小示例

点击学习枚举小示例

猜你喜欢

转载自blog.csdn.net/mmlz00/article/details/85226093