JavaSE 揭秘枚举类型

1.模拟枚举类型

定义一个类WeekDay:

说明:对于WeekDay中的抽象方法nextDay() 因此类也需要声明为抽象的!当new对象的时候要重写其中的抽象方法!

package cn.itcast.demo;

public abstract class WeekDay {
	private WeekDay(){}//私有构造方法
	public final static WeekDay SUN=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return MON;
		}
	};
	public final static WeekDay MON=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return SUN;
		}
	};
	public final static WeekDay TUES=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return WED;
		}
	};
	public final static WeekDay WED=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return THU;
		}
	};
	public final static WeekDay THU=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return FRI;
		}
	};
	public final static WeekDay FRI=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return STA;
		}
	};
	public final static WeekDay STA=new WeekDay() {
		@Override
		public WeekDay nextDay() {
			return SUN;
		}
	};
	public  abstract  WeekDay nextDay();
}

测试类WeekDayTest

package cn.itcast.demo;

public class WeekDayTest {
	public static void main(String[] args) {
		WeekDay weekDay=WeekDay.SUN;
		System.out.println(weekDay.nextDay());
	}
}

打印结果:MON

2.枚举类型简单入门

注:

1)第一行的数据只能是枚举的实例!不能定义成员变量,构造方法

2)枚举类型可以有构造方法,但是只能声明为private,也可以有带有参数的构造方法!

3)要想在枚举的实例中使用带参数的构造方法:语法为 SUN(参数)

4)枚举的静态方法valueOf("str")可以将一个字符串转化为枚举的对象类型

package cn.itcast.demo2;

public enum WeekDay{
	//下面的SUN(1)是对有参数的构造方法的调用
	SUN(1),MON;//第一行只能是枚举类的实例变量
	private int day;//不能放在第一行,会报错
	private WeekDay(){}//不能放在第一行,会报错 无参数的构造方法,只能声明为private
	private WeekDay(int day){//有参数的构造方法
		this.day=day;
	}
	public static void main(String[] args) {
		WeekDay weekDay=WeekDay.SUN;//这个对象是有参数的构造方法
		System.out.println(weekDay.day);
		WeekDay weekDay2=WeekDay.MON;//无参数的构造方法
		System.out.println(WeekDay.valueOf("SUN"));//把字符串转化为对象
	}
}

运行结果:1 SUN

3.枚举中的抽象类

注:

1)枚举中也可以声明抽象方法,但是枚举中的实例常量,必须重写该方法!

package cn.itcast.demo2;

public class TrafficLampTest {
	public static void main(String[] args) {
		TrafficLamp lamp=TrafficLamp.GREEN;
		System.out.println(lamp.nextLamp());//实际上调用的是匿名内部类中的已经实现抽象方法的方法
	}
}
enum TrafficLamp{
	RED(50) {
		@Override
		public TrafficLamp nextLamp() {
			return GREEN;
		}
	},GREEN(20) {
		@Override
		public TrafficLamp nextLamp() {
			return YELLOW;
		}
	},YELLOW(10) {//有参数的构造方法
		@Override
		public TrafficLamp nextLamp() {
			return RED;
		}
	};
	private TrafficLamp(){}//没有参数的构造方法
	private int time;//定义时间
	private TrafficLamp(int time){//有参数的构造方法
		this.time=time;
	}
	public abstract TrafficLamp nextLamp();//定义抽象方法
}

运行结果:YELLOW

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-09 08:35:20

JavaSE 揭秘枚举类型的相关文章

C#枚举类型的常用操作总结

枚举类型是定义了一组"符号名称/值"配对.枚举类型是强类型的.每个枚举类型都是从system.Enum派生,又从system.ValueType派生,而system.ValueType又从system.Object派生,所以枚举类型是指类型. 编译枚举类型时,C#编译器会把每个符号转换成类型的一个常量字段.C#编译器将枚举类型视为基元类型. 1.获取枚举列表:         /// <summary>         /// 获取枚举列表         /// <

获取枚举类型Description特性的描述信息

C#中可以对枚举类型用Description特性描述. 如果需要对Description信息获取,那么可以定义一个扩展方法来实现.代码如下: public static class EnumExtensions { public static string GetDescription(this object value) { if (value==null) return string.Empty; Type type = value.GetType(); var fieldInfo = ty

C++ Primer 笔记——枚举类型

1.和类一样,每个枚举类型定义了一种新的类型.枚举属于字面值常量类型. 2.C++包含两种枚举:限定作用域的和不限定作用域的.C++11新标准引入了限定作用域的枚举类型. enum class /*struct*/ MyEnum { A = 0}; // 限定作用域的枚举 enum class /*struct*/ MyEnum1 { A = 0 }; // 限定作用域的枚举可以有重复的名字,使用时也必须加上作用域 enum MyEnum2 { B = 0 }; // 不限定作用域的枚举 enu

笔记:枚举类型

枚举类型的定义格式如: public enum Size{ SMALL,MEDIUM,LARGE,EXTRA_LARGE} ? ? 实际上,这个声明定义了一个类 size,该类是一个特殊的类,可以定义自己的数据字段.方法.可以实现接口,也可以定义自己的构造器.但枚举类使用 enum 定义后在编译后默认继承了 java.lang.Enum 类,而不是普通的继承 Object类.Enum 声明类继承了 Serializable 和 Comparable 两个接口.且采用 enum 声明后,该类会被编

结构体 枚举类型

结构体 class Program { struct student { public int num; public string name; public string sex; public one oone; public int[] qq; } struct one { public string aa; public int bb; } static void Main(string[] args) { ////struct ////初始化结构体 //student stu = ne

C#之枚举类型

参考: http://www.cnblogs.com/an-wl/archive/2011/04/14/2015815.html 惯例先上MSDN: https://msdn.microsoft.com/zh-cn/library/cc138362(v=vs.110).aspx 枚举类型(也称为枚举)为定义一组可以赋给变量的命名整数常量提供了一种有效的方法.例如,假设您必须定义一个变量,该变量的值表示一周中的一天.该变量只能存储七个有意义的值.若要定义这些值,可以使用枚举类型.枚举类型是使用en

利用枚举类型实现统计

口袋中有5种颜色的小球,每次从口袋中任意取3个,问得到3种不同颜色的小球的可能取法? #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<iomanip> using namespace std; int main() { enum color{red,yellow,blue,white,black};//声明枚举类型color color pri;    //定义color类型的变量pri int i, j,

WebService中使用枚举类型

1.在服务端编写枚举值 public enum BackWorkType { None, Test } 2.为每一个枚举值添加下面属性,添加下面属性后服务可以通过对象字符串进行序列化 [EnumMember(Value = "None")] 3.添加完后枚举变成 public enum BackWorkType { [EnumMember(Value = "None")] None, [EnumMember(Value = "Test")] Te

C# 获取与解析枚举类型的 DescriptionAttribute

原文:C# 获取与解析枚举类型的 DescriptionAttribute System.ComponentModel.DescriptionAttribute 这个 Attribute,经常被用来为属性或事件提供说明,这个说明是可以被本地化的.在一些用户界面中,就可以利用这个 Attribute 提供一些额外的信息,就像 Visual Studio 中所做的,如图 1 所示: 图 1 可以看到,对 AutoSizeMode 的说明,被显示在了下面的框中. 但是,界面中的枚举项就没这么好的待遇了