Java的Enum类型

本文深入探讨了 Java 中 enum 类型的使用方法,包括遍历、添加自定义方法、重写 toString 方法、switch 语句中的枚举类型及随机选取枚举实例等核心功能。通过具体代码示例展示了如何在实际编程中灵活运用 enum,提升代码的可读性和实用性。

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

没注意到一直以为java的enum只是简单的数字表示跟C一样,

没想到可以和类一样

转载:http://wosyingjun.iteye.com/blog/1895381

------------------------------------------------------------------------------------------------------

1、enum的遍历和基本方法

 
package yingjun.enumeration;

enum Shrubbery { GROUND, CRAWLING, HANGING }

public class EnumClass {
  public static void main(String[] args) {
	//调用enum的value()方法可以遍历enum实例
    for(Shrubbery s : Shrubbery.values()) {
      System.out.println(s + " ordinal: " + s.ordinal()); //返回enum实例的次序
      System.out.println(s.compareTo(Shrubbery.CRAWLING) + " ");//比较
      System.out.println(s.equals(Shrubbery.CRAWLING) + " ");//比较
      System.out.println(s == Shrubbery.CRAWLING);//比较
      System.out.println(s.getDeclaringClass());//获取所属类
      System.out.println(s.name());//获取相应的enum实例 和toString()方法效果相同
      System.out.println("----------------------");
    }
    // 通过字符生成枚举类型
    for(String s : "HANGING CRAWLING GROUND".split(" ")) {
      Shrubbery shrub = Enum.valueOf(Shrubbery.class, s);
      System.out.println(shrub);
    }
  }
} 
 
GROUND ordinal: 0
-1 
false 
false
class yingjun.enumeration.Shrubbery
GROUND
----------------------
CRAWLING ordinal: 1
0 
true 
true
class yingjun.enumeration.Shrubbery
CRAWLING
----------------------
HANGING ordinal: 2
1 
false 
false
class yingjun.enumeration.Shrubbery
HANGING
----------------------
HANGING
CRAWLING
GROUND

  2、向enum中添加自己的方法

 
package yingjun.enumeration;

public enum OzWitch {
  //构建实例的通同时添加自身的描述
  WEST("Miss Gulch, aka the Wicked Witch of the West"),
  NORTH("Glinda, the Good Witch of the North"),
  EAST("Wicked Witch of the East, wearer of the Ruby " +"Slippers, crushed by Dorothy's house"),
  SOUTH("Good by inference, but missing");
  private String description;
  
  private OzWitch(String description) {
    this.description = description;
  }
  
  public String getDescription() { return description; }
  public static void main(String[] args) {
    for(OzWitch witch : OzWitch.values())
      System.out.println(witch + ": " + witch.getDescription());
  }
}

 

 
WEST: Miss Gulch, aka the Wicked Witch of the West
NORTH: Glinda, the Good Witch of the North
EAST: Wicked Witch of the East, wearer of the Ruby Slippers, crushed by Dorothy's house
SOUTH: Good by inference, but missing

  3、重写enum的toString()方法

 

//重写toString()方法
public enum SpaceShip {
  SCOUT, CARGO, TRANSPORT, CRUISER, BATTLESHIP, MOTHERSHIP;
  public String toString() {
    String newname = name();
    String lower = newname.substring(1).toLowerCase();
    return newname.charAt(0) + lower;
  }
  public static void main(String[] args) {
    for(SpaceShip s : values()) {
      System.out.println(s);
    }
  }
}

 

 
Scout
Cargo
Transport
Cruiser
Battleship
Mothership

   4、switch语句中的enum

 

package yingjun.enumeration;

enum Signal { GREEN, YELLOW, RED, }

public class TrafficLight {
  Signal color = Signal.RED;
 
  public String toString() {
    return "The traffic light is " + color;
  }
  public void change() {
		//编译器自动调用ordinal()产生整数的次序
	    switch(color) {
	      case RED:    color = Signal.GREEN;
	                   break;
	      case GREEN:  color = Signal.YELLOW;
	                   break;
	      case YELLOW: color = Signal.RED;
	                   break;
	    }
	  }
  public static void main(String[] args) {
    TrafficLight t = new TrafficLight();
    for(int i = 0; i < 7; i++) {
      System.out.println(t);
      t.change();
    }
  }
}

   

The traffic light is RED
The traffic light is GREEN
The traffic light is YELLOW
The traffic light is RED
The traffic light is GREEN
The traffic light is YELLOW
The traffic light is RED

    5、随机选取enum中的实例

   

package yingjun.enumeration;


import java.util.*;

public class Enums {
  private static Random rand = new Random(47);
  public static <T extends Enum<T>> T random(Class<T> ec) {
    return random(ec.getEnumConstants());
  }
  public static <T> T random(T[] values) {
    return values[rand.nextInt(values.length)];
  }
} 

 

package yingjun.enumeration;


enum Activity { SITTING, LYING, STANDING, HOPPING,
  RUNNING, DODGING, JUMPING, FALLING, FLYING }

public class RandomTest {
  public static void main(String[] args) {
    for(int i = 0; i < 20; i++)
      System.out.print(Enums.random(Activity.class) + "\n");
  }
} 

 

Result代码 复制代码  收藏代码
  1. STANDING  
  2. FLYING  
  3. RUNNING  
  4. STANDING  
  5. RUNNING  
  6. STANDING  
  7. LYING  
  8. DODGING  
  9. SITTING  
  10. RUNNING  
  11. HOPPING  
  12. HOPPING  
  13. HOPPING  
  14. RUNNING  
  15. STANDING  
  16. LYING  
  17. FALLING  
  18. RUNNING  
  19. FLYING  
  20. LYING  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值