zoukankan      html  css  js  c++  java
  • 枚举类专题(有源代码)

    简介:JDK1.5之前需要自定义枚举类,JDK1.5新增的enum关键字用于定义枚举类,若枚举只有一个成员,则可以作为一种单例模式的实现方式

    枚举类的属性:枚举类对象的属性不应允许被改动,所以应该使用private final修饰

    ·枚举类的使用private final修饰的属性应该在构造器中为其赋值

    ·若枚举类显式的定义了带参数的构造器,则在列出枚举值时也必须对应的传入参数

    Enum枚举类:

    ·必须在枚举类的第一行声明枚举类对象。

    ·枚举类和普通类的区别:

      1.使用enum定义的枚举类默认继承了java.lang.Enum类

      2.枚举类的构造器只能使用private访问控制符

      3.枚举类的所有实例必须在枚举类中显式列出(,分隔 ;结尾)列出的实例系统会自动添加public static final 修饰

    ·JDK 1.5 中可以在switch表达式中使用Enum定义的枚举类的对象作为表达式,case 子句可以直接使用枚举值的名字,无需添加枚举类作为限定

    ·枚举类的主要方法:

    1.values()方法:返回枚举类型的对象数组。该方法可以很方便地遍历所有的枚举值。

    2.valueOf(String str):可以把一个字符串转为对应的枚举类对象。要求字符串必须是枚举类对象的“名字”。如不是,会有运行时异常。

     实现接口的枚举类:

    ·和普通java类一样,枚举类可以实现一个或多个接口

    ·若需要每个枚举值在调用实现的接口方法呈现出不同的行为方式,则可以让每个枚举值分别来实现该方法

    下面是最关键的:代码

      1 package com.demo;
      2 /*
      3  * 一、自己定义
      4  * 二、使用enum关键字定义枚举类
      5  * 1.常用的方法
      6  * 2.如何让枚举类实现接口
      7  */
      8 public class TestSeason {
      9     public static void main(String[] args) {
     10         //1.values()的用法 返回所有 枚举类的对象
     11         SeasonEnum[] values = SeasonEnum.values();
     12         for (int i = 0; i < values.length; i++) {
     13                     values[i].showMe();
     14         }
     15         //2.valueOf(String name):要求传入的形参name是枚举类对象的名字,
     16         //否则,报java.lang.IllegalArgumentException异常
     17         String str = "SUMMER";
     18         SeasonEnum season= SeasonEnum.valueOf(str);
     19         season.showMe();
     20         System.out.println(season);
     21         //3.getDeclaringClass()这个方法得到枚举常量所属枚举类型的Class对象
     22         //可以用它来判断两个枚举常量是否属于同一个枚举类型
     23         System.out.println(season.getDeclaringClass());
     24         //4.ordinal() 得到当前枚举常量的次序
     25         System.out.println(season.ordinal());
     26         //toString()方法  可以重写,使结果更好看
     27         //equals()在枚举类型中可以直接使用“==”来比较两个枚举常量是否相等。Enum提供的这个equals()方法,
     28         //也是直接使用“==”实现的。它的存在是为了在Set、List和Map中使用。注意,equals()是不可变的。
     29         //hashcode   Enum实现了hashCode()来和equals保持一致。它也是不可变的。
     30         //compareTo 枚举类型实现了comparable 接口,这样可以比较两个枚举常量的大小(按照声明的顺序排列)
     31         //clone 枚举类型不能被clone。为了防止子类实现克隆方法,enum实现了一个仅抛出clonenotsupportedexception异常的不变clone().
     32     }
     33 }
     34 //枚举类,自己定义的,不是官方的,反正功能都一样
     35 class Season{
     36     //1.提供类的属性,声明为private final
     37     private final String seasonName;
     38     private final String seasonDesc;
     39     //2.声明为final的属性,在构造器中初始化
     40     private Season(String seasonName,String seasonDesc){
     41         this.seasonName = seasonName;
     42         this.seasonDesc = seasonDesc;
     43     }
     44     //3.通过公共的方法来调用属性
     45     public String getSeasonName() {
     46         return seasonName;
     47     }
     48 
     49     public String getSeasonDesc() {
     50         return seasonDesc;
     51     }
     52     //4.创建枚举类的对象
     53     public static final Season SPRING = new Season("spring", "春暖花开");
     54     public static final Season SUMMER = new Season("summer", "夏日炎炎");
     55     public static final Season AUTUMN = new Season("autumn", "秋高气爽");
     56     public static final Season WINTER = new Season("winter", "白雪皑皑");
     57     
     58     @Override
     59     public String toString() {
     60         return "Season [seasonName=" + seasonName + ", seasonDesc=" + seasonDesc + "]";
     61     }
     62     public void show(){
     63         System.out.println("这是一个季节");
     64     }
     65     
     66 }
     67 //泛型类,这个是系统提供
     68 enum SeasonEnum implements Info{
     69     //这个得放在第一行
     70     SPRING ("spring", "春暖花开"){
     71         public void showMe(){
     72             System.out.println("我叫春天!");
     73         }
     74     },
     75     SUMMER ("summer", "夏日炎炎"){
     76         public void showMe(){
     77             System.out.println("我叫夏天!");
     78         }
     79     },
     80     AUTUMN ("autumn", "秋高气爽"){
     81         public void showMe(){
     82             System.out.println("我叫秋天!");
     83         }
     84     },
     85     WINTER ("winter", "白雪皑皑"){
     86         public void showMe(){
     87             System.out.println("我叫冬天!");
     88         }
     89     };
     90         
     91     private final String seasonName;
     92     private final String seasonDesc;
     93     
     94      private SeasonEnum(String seasonName,String seasonDesc) {
     95         this.seasonName = seasonName;
     96         this.seasonDesc = seasonDesc;
     97     }
     98 
     99     public String getSeasonName() {
    100         return seasonName;
    101     }
    102 
    103     public String getSeasonDesc() {
    104         return seasonDesc;
    105     }
    106     @Override
    107     public String toString() {
    108         return this.getSeasonName()+":"+this.getSeasonDesc();
    109     }
    110 
    111     public void showMe() {
    112         
    113     }
    114 
    115 }
    116 //泛型类 要实现的接口
    117 interface Info {
    118     void showMe();
    119 }
  • 相关阅读:
    树链剖分 (模板) 洛谷3384
    ST表 (模板) 洛谷3865
    IOI 2005 River (洛谷 3354)
    IOI 2005 River (洛谷 3354)
    poj1094 Sorting It All Out
    poj1094 Sorting It All Out
    spfa(模板)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    HAOI 2006 受欢迎的牛 (洛谷2341)
    洛谷1850(NOIp2016) 换教室——期望dp
  • 原文地址:https://www.cnblogs.com/liangxiaoyu/p/5119048.html
Copyright © 2011-2022 走看看