zoukankan      html  css  js  c++  java
  • java 枚举类

    在J2SE5.0中要定义枚举类型是使用enum关键词,枚举类型主要提供一些常数。虽然语法上不像是在定义类,但枚举类型本质上就是一个类。所以编译完成后,会产生一个.class文件。

    继承自java.lang.Enum类。而每个被枚举的成员其实就是定义的枚举类型的一个实例,它们都被默认为final。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常

    量限制相同。可以通过类名称直接使用它们。 

    package base;
    
    public class TestEnum {
    
    	// 最普通的枚举
    	public enum ColorSelect {
    		red, green, yellow, blue;
    	}
    
    	// 枚举也可以象一般的类一样添加方法和属性
    	public enum Season {
    		// 枚举列表必须写在最前面,否则编译出错
    		winter, spring, summer, fall;
    
    		private final static String location = "Phoenix";
    
    		public static Season getBest() {
    			if (location.equals("Phoenix"))
    				return winter;
    			else
    				return summer;
    		}
    	}
    
    	// 带有有构造方法 /
    	public enum Temp {
    		// 通过括号赋值,而且必须有带参构造器和属性并赋值,
    		absoluteZero(-459), freezing(32), boiling(212), paperBurns(451);
    
    		private final int value;
    		private final String value2;
    
    		public int getValue() {
    			return value;
    		}
    
    		// 构造器默认也只能是private, 从而保证构造函数只能在内部使用
    		private Temp(int value) {
    			this.value = value;
    			this.value2 = null; // 成员必须初始化
    		}
    
    		Temp(String value2) {
    			this.value2 = value2;
    			this.value = 0;
    		}
    	}
    
    	interface IDescription {
    		public String getDescription();
    	}
    
    	// 为每个枚举值定义各自的类本体与方法实现
    	enum MoreAction implements IDescription {
    		TURN_LEFT {
    			public String getString() {
    				return "向左转";
    			}
    
    			@Override
    			public String getDescription() {
    				return "向左转";
    			}
    		}, // 注意这里的枚举值分隔使用,
    		TURN_RIGHT {
    			public String getString() {
    				return "向右转";
    			}
    
    			@Override
    			public String getDescription() {
    				return "向右转";
    			}
    
    		}, // 注意这里的枚举值分隔使用,
    
    		SHOOT {
    			public String getString() {
    				return "射击";
    			}
    
    			@Override
    			public String getDescription() {
    				return "射击";
    			}
    
    		}; // 注意这里的枚举值结束使用;
    
    	}
    
    	public static void main(String[] args) {
    		// 枚举类型是一种类型,用于定义变量,以限制变量的赋值
    		ColorSelect m = ColorSelect.blue;
    		switch (m) {
    
    		// 枚举变量的值是不带前缀的所以为blue而非ColorSelect.blue
    		case red:
    			System.out.println("color is red");
    			break;
    		case green:
    			System.out.println("color is green");
    			break;
    		}
    
    		// 通过values()获得枚举值的数组
    		for (ColorSelect c : ColorSelect.values()) {
    
    		}
    
    		// ordinal()返回枚举值在枚举中的索引位置,从0开始
    		System.out.println(ColorSelect.red.ordinal());// 0
    		System.out.println(ColorSelect.green.ordinal());// 1
    
    		// 枚举默认实现了java.lang.Comparable接口
    		System.out.println(ColorSelect.red.compareTo(ColorSelect.green));
    
    		System.out.println(Season.getBest());
    
    		for (Temp t : Temp.values()) {
    			// 通过getValue()取得相关枚举的值
    			System.out.println(t + "的值是" + t.getValue());
    		}
    
    	}
    }
    

      

  • 相关阅读:
    Android 中退出程序的几种方法
    POJ 1860 Currency Exchange (Bellman-Ford)
    HDU 5183 Negative and Positive (NP) (手写哈希)
    C++ 常见的cin的错误处理
    POJ 2287 Tian Ji -- The Horse Racing (贪心)
    HDU 1205 吃糖果 (鸽巢原理)
    HDU 1028 Ignatius and the Princess III (动态规划)
    HDU 3746 Cyclic Nacklace (KMP找循环节)
    Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2)
    HDU 2087 剪花布条 (KMP)
  • 原文地址:https://www.cnblogs.com/jinc/p/2090017.html
Copyright © 2011-2022 走看看