=========================
枚举的作用:一些方法在运行时,它需要的数据不能是任意的,而必须在一定的范围,可以用枚举解决
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;
}
}