黑马程序员—Java中的枚举类

------- android培训java培训、期待与您交流! ----------

 

枚举:关键字enum
 

 

问题:对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个;

解决办法:

1)、在setGrade方法中做判断,不符合格式要求就抛出异常;

2)、直接限定用户的选择,通过自定义类模拟枚举的方式来限定用户的输入,写一个Grade类,私有构造函数,对外提供5个静态的常量表示类的实例;

3)、jdk5中新定义了枚举类型,专门用于解决此类问题;

4)、枚举就是一个特殊的java类,可以定义属性、方法、构造函数、实现接口、继承类;

Enum是在Java中用来定举类型的关字。Enum一般用来表示一相同类型的常量,如性别、日期 色等.

下面是一个最简单的枚举。

public enum Color

{

RED,

GREEN,

BLUE

}

实际上在Java枚举类型本质上就是一个类,其继承自java.lang.Enum类。

通过默认提供的GetValues()方法可以获取所有枚举对象,其以一个数组的形式返回。

for(Colorcolor : Color.values())

{

System.out.printf("%s:%s%n",color,color.toString());

}

 

输出结果为:

RED: RED

GREEN: GREEN

BLUE: BLUE

 

既然是enum本质上是类,那么我们当然可以给其加一些方法。注意最后一个枚举对象要使用结尾,说明枚举值结束使用。

public enum Color
{
RED("Red Color"),
GREEN("Green Color"),
BLUE("Blue Color");
private final String color;
 
private Color(Stringcolor) {
    this.color =color;
}
 
public StringgetColor() {
return color;
}
}
 


注意在enum中是不能声明public的构造函数的,这样是为了避免直接实例化enum对象。

我们可以通过getValues方法调用getColor()方法。

for(Color color : Color.values())

{

System.out.printf("%s:%s%n",color,color.getColor());

}

 

以下是输出结果:

RED: Red Color

GREEN: Green Color

BLUE: Blue Color

 

如果大家还是看不太明白的话,我可以展示一个类来对个对比。

 

public final class Color extends java.lang.Enum{

    public static final Color RED;

    public static final Color GREEN;

    public static final Color  BLUE;

    static {};

    public java.lang.String getColor();

    public static Color[] values();

    public static ColorvalueOf(java.lang.String);

}

这个类的作用完全等同于我们的Color枚举对象。每个被枚举的成员其实就是定义的枚举类型的一个实例,它们都被默认为final。无法改变常数名称所设定的值,它们也是publicstatic的成员,这与接口中的常量限制相同。可以通过类名称直接使用它们。

所以我们大胆的在里面增加一些其它的方法来实现我们的新特性。

在这里我增加了一个新的方法isRed()来判断当前枚举实例是否是红色的。

public enum Color

{

RED("Red Color"),

GREEN("Green Color"),

BLUE("Blue Color");

private final String color;

 

private Color(Stringcolor) {

    this.color =color;

}

 

public StringgetColor() {

return color;

}

public boolean isRed()

{

return this.equals(RED);

}

}

可以对其进行一个测试。

Color green = Color.GREEN;

System.out.print(green.isRed());

 

Color red = Color.RED;

System.out.print(red.isRed());

第一个输出结果为false,第二个输出结果为true

 

 访问修辞符 enum 枚名:基类型
    {
        枚
    }

类型必能够表示中定的所有枚值。声明可以式地声明byte、short、、int、uint、long 型作为对应的基类型。没有式地声明基类型的枚声明意味着所对应的基类型是 int.

 

public enum Color

{

RED,

GREEN,

BLUE

}

所以我们可以直接将一个枚举类型强制转换成其对应的基础类型。

 

Int  num = (int)Color.Red;

Num的值为0.

我们也可以反向转换。

Color color = (Color)num;

 

 

------- android培训java培训、期待与您交流! ----------详细请查看:http://edu.csdn.net

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值