天天看點

java-枚舉

package nume_1;


/**
 * 枚舉
 * 
 * 定義:和常量一樣的,是static和final的
 * 
 * 為什麼用枚舉不直接用,static final的直接用
 * 
 * 1.static final定義的直接是個具體的值,這個值得效果和static和final定義的常量效果一樣
 * 
 * 2.static final定義的不安全
 * 
 * 
 * 
 *     枚舉的常用方法
 *
 *1.values()    //可以把枚舉類型的成員以數組的類型傳回
 *2.valueOf()   //可以把正常的String的類型換成enum
 *3.compareTo()   //用于比較枚舉定義的時候的順序
 *4.ordinal()   //枚舉位置的索引,第一個0
 *
 *
 */
public class Nume_Main_1 {
  public static void doit_sf(int c) {
    switch (c) {
    case Season_sf.Spring:
      System.out.println("sf-春天");
      break;
    case Season_sf.Summer:
      System.out.println("sf-夏天");
      break;
    case Season_sf.Autumn:
      System.out.println("sf-秋天");
      break;
    case Season_sf.Winter:
      System.out.println("sf-冬天");
      break;
    }

  }

  public static void doit_nume(Season_enum s) {
    switch (s) {
    case Spring:
      System.out.println("enum-春天");
      break;
    case Summer:
      System.out.println("enum-夏天");
      break;
    case Autumn:
      System.out.println("enum-秋天");
      break;
    case Winter:
      System.out.println("enum-冬天");
      break;
    }

  }

  public static void main(String[] args) {
    // TODO 自動生成的方法存根
    // 對比static、final和枚舉的效果
    Nume_Main_1.doit_sf(1);// 這裡就是sf的缺點,可以用具體的值來使用這個函數,不安全;
    // Nume_Main_1.doit_enum(1);報錯
    // Nume_Main_1.doit_enum(Season_enum);報錯,因為沒有對象
    Nume_Main_1.doit_nume(Season_enum.Spring);// 這裡就是可以,因為nume裡面的就是對象
  
  
  //values()方法使用
    
    Season_enum [] enums=Season_enum.values();
    for (Season_enum season_enum : enums) {
      System.out.println(season_enum);
    }
  
  //valueOf()方法使用和直接.效果一樣
    System.out.println("-------------------");
    Season_enum enum1=Season_enum.valueOf("Spring");//這個引号裡面的必須是真實存在的
    
    System.out.println(enum1);
    System.out.println(Season_enum.Spring);
    //compareTo()方法//自身順序減去括号裡面的順序
    System.out.println("-------------------");
    
    System.out.println(Season_enum.Spring.compareTo(Season_enum.Autumn));
    
    System.out.println(Season_enum.Autumn.compareTo(Season_enum.Autumn));
    
    System.out.println(Season_enum.Autumn.compareTo(Season_enum.Summer));
    
    System.out.println("-------------------");
    // ordinal();枚舉位置的索引,第一個0;
    System.out.println(Season_enum.Autumn.ordinal());
  }

}      
package nume_1;

public interface Season_sf {
  public static final int Spring = 1;
  public static final int Summer = 2;
  public static final int Autumn = 3;
  public static final int Winter = 4;
}      
package nume_1;

public enum Season_enum {
  Spring, Summer, Autumn, Winter;
  // 1. 這裡是可以用逗号結尾也可以的是什麼都不寫,最好的是;好
//這裡每個Spring···都是對象
}      
package com.zdft.mdm.pricerules.util;

/**
 * @Author yhc
 * @Date 2022-08-09 10:02
 **/
public enum priceEnum {
    RED("紅色", 15), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);


    // 成員變量

    private String name;

    private int index;

    // 構造方法

    private priceEnum(String name, int index) {

        this.name = name;

        this.index = index;

    }

    public static void main(String[] args) {
        System.out.println( priceEnum.valueOf("RED").name);
        System.out.println("===========================");
        System.out.println(priceEnum.RED.ordinal());
        for (priceEnum s:priceEnum.values()
             ) {
            System.out.println(s.name+":"+s.index);
        }

    }
}