------- 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。无法改变常数名称所设定的值,它们也是public和static的成员,这与接口中的常量限制相同。可以通过类名称直接使用它们。
所以我们大胆的在里面增加一些其它的方法来实现我们的新特性。
在这里我增加了一个新的方法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