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 }
  • 相关阅读:
    POJ3764 The xorlongest Path
    POJ1733 Parity game
    POJ3301 Texas Trip
    POJ2135 Farm Tour
    POJ2516 Minimum Cost
    Mem478
    PROJECTEULER48
    POJ1201 Intervals
    CSS 伪元素 (Pseudoelements)
    JQuery显示隐藏层
  • 原文地址:https://www.cnblogs.com/liangxiaoyu/p/5119048.html
Copyright © 2011-2022 走看看