_051_枚举

=========================

枚举的作用:一些方法在运行时,它需要的数据不能是任意的,而必须在一定的范围,可以用枚举解决

enum 类名{
  //枚举值
   }

注意:
1 枚举也是一个特殊的类
2 枚举值默认的修饰符是public static final,数据类型默认是枚举值所属类的数据类型
3 枚举值是指向了本类的对象的
4 枚举类的构造方法默认的修饰符是private,意思就是说不能被new,但是枚举的枚举值就是一个对象
所以可以直接获取对象
5 枚举类可以定义自己的成员变量和成员函数
6 枚举类可以定义构造函数,但是必须要用private修饰
7 枚举类内可以有抽象类,但是枚举值必须要实现抽象的方法
8 枚举值必须要位于枚举类的第一个位置

class Test
{
	public static void main(String[] args)
	{
		Sex sex1 = Sex.man;
		sex1.value = "ww";
		sex1.getValue();
		sex1.run();
		
		Sex sex2 = Sex.woman;
		sex2.value = "ww";
		sex2.getValue();
		sex2.run();
		
	}
}

enum Sex
{
	// man,woman;//定义了2个枚举值
	// 如果定义了一个参数的构造方法,那么直接上面那样写就会出错
	// 因为默认是public static final Sex man=new
	// Sex()这样的,就是说创建无参数的构造方法,而现在有了参数,就需要我们自己传参数

	man("男")
	{

		@Override
		public void run()
		{
			getValue();System.out.println("男人在跑");
		}

	},
	woman("女")
	{
		@Override
		public void run()
		{
			getValue();System.out.println("女人在跑");
		}
	};
	// 枚举类内可以有抽象类,但是枚举值必须要实现抽象的方法

	String value;// 可以定义成员变量

	private Sex(String value)
	{
		this.value = value;
	}

	public void getValue()
	{
		System.out.println("value:   " + value);
	}

	public abstract void run(); //抽象方法

}
// 对上面的Sex进行反编译,会发现
// man就被写成 public static final Sex man,是一个常量,数据类型是Sex
// 而且对代码分析还会发现public static final Sex man=new Sex()
// 意思就算说枚举值就是本类的对象

枚举的应用场景

class Test
{
	public static void main(String[] args)
	{
		SeaSon seaSon1 = SeaSon.winter;
		switch (seaSon1)
		{
		case spring:
			System.out.println("春天========");
			break;
		case summer:
			System.out.println("夏天======");
			break;
		case autom:
			System.out.println("秋天========");
			break;
		case winter:
			System.out.println("冬天=====");
			break;
		default:
			break;
		}
		
		// 下面是枚举的具体使用,就是说一些方法在运行时,它需要的数据不能是任意的,而必须在一定的范围,比如说只有男女
		Person person1 = new Person();
		
		// person1.setSex("玩玩玩");
		// person1.getSex();
		// 上面是在传入之后才提示性别非法,我要在一开始就限制传入的数据只有男女,就能使用枚举,或自己创建一个类
		
		person1.setSex(Sex.man);
		System.out.println(person1.getSex());
	}

}

enum SeaSon
{
	spring, summer, autom, winter;
}

enum Sex
{
	man("男"), woman("女");
	private String value;

	private Sex(String value)
	{
		this.value = value;
	}

	public String getValue()
	{
		return value;
	}
}

class Person
{
	private Sex sex;

	public String getSex()
	{
		return sex.getValue();
	}

	public void setSex(Sex sex)
	{
		this.sex = sex;
	}
}

猜你喜欢

转载自blog.csdn.net/yzj17025693/article/details/82772749
今日推荐