java的枚举

1.枚举的定义

枚举是从Java5开始提供的一种新的数据类型,是一个特殊的类,就是固定的多个常量对象的集合.

定义格式: 
[修饰符] enum  枚举类名
{
      常量A,常量B,常量C;

}

enum Weekday 
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}


2.枚举类的特点

枚举特点
① 枚举的直接父类java.lang.Enum,但是不能显示继承Enum

enum Weekday extends Enum  //报错
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}
② 枚举就相当于一个类, 可以定义构造方法、成员变量、普通方法和抽象方法

enum Weekday
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;

	public void doWork(){
		System.out.println("普通方法");
	};
}
③ 默认私有构造方法,即使不写访问权限也是private((假构造器,底层没有无参数构造器)。

enum Weekday
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;

	Weekday(){
		System.out.println("无参数构造方法");
	}
}

④ 每个实例分别用一个全局常量表示,枚举类的对象是固定的,实例个数有限, 不能使用new关键字

enum Weekday
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}

class Test
{
	public static void main(String[] args){
		Weekday week = new Weekday();  //尝试创建对象,结果报错: 无法实例化枚举类型
	}
}
⑤ 枚举实例必须位于枚举体中的最开始部分,枚举实例列表最后要有分号与其他成员相分隔。

错误写法:

enum Weekday
{
	void doWork(){
		System.out.println("其他方法");
	};

	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;   //枚举实例必须放最前面,其他方法,变量都放在后面,否则报错
	
}
正确写法:

enum Weekday
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;   //枚举实例必须放最前面,其他方法,变量都放在后面,否则报错

	void doWork(){
		System.out.println("其他方法");
	};	
}

⑥ 枚举实例后有花括号时,该实例是枚举类的匿名内部类对象(查看编译后的class文件)。

3.枚举的使用

   1):枚举中都是全局公共的静态常量,可以直接使用枚举类名调用.
          Weekday day = Weekday.SATURDAY;

enum Weekday
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}

class Test
{
	public static void main(String[] args){
		Weekday day = Weekday.SUNDAY;
		System.out.println(day);  //SUNDAY
	}
}

   2):因为java.lang.Enum类是所有枚举类的父类,所以所有的枚举对象可以调用Enum类中的方法.
         String   name = 枚举对象.name();  //返回枚举对象的常量名称
         int      ordinal = 枚举对象.ordinal();//返回枚举对象的序号,从0开始.
         String  str       =  枚举对象.toString():返回 枚举对象的常量名称
   3):编译器生成的枚举类的静态方法( 从反编译代码中查看):
          枚举类型[]  values();
          Weekday[] ws   = Weekday.values();:返回当前枚举类型所有的常量,使用一个数组封装起来.
          枚举类型  valueof(String name);
          Weekday  day = Weekday.valueOf("MONDAY");//把一个指定名称字符串转换为当前枚举类中同名的常量.

enum Weekday
{
	MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY;
}

class Test
{
	public static void main(String[] args){
		Weekday sunday = Weekday.SUNDAY;

		String day = sunday.name();
		int ordinal = sunday.ordinal();
		String day2 = sunday.toString();

		System.out.println(day);  //SUNDAY
		System.out.println(ordinal);  //6
		System.out.println(day2);  //SUNDAY

		Weekday[] ws   = Weekday.values();
		for(Weekday weekday: ws){
			System.out.println(weekday); //MONDAY,TUSESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
		}
	}
}

    4):从java5开始出现枚举,switch也支持操作枚举类型.
          switch只支持int类型,支持枚举是因为底层使用的枚举对象的ordinal,而ordinal的类型依然是int类型.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值