您的位置:首页 > 职场人生

黑马程序员——java中的枚举

2015-05-17 21:40 148 查看
——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-

在编写程序时,我们有时候会想限定对象的值,如在在编写一周七天的对象时 ,我们需要的对象只有七个,为了避免程序出错的几率,如出现第八天,那就要求我们限定对象的建立,在限定对象的建立中,我们想到的是单例模式,在单例模式中我们限定的对象的建立,使的该类对象只有个,同样的方法可以用解决我们现在的问题`。

编写程序限定对象值的建立:

/**
* 编写一个可以表示一周内所有天数的类
*/
public class EnumTest1 {

public static void main(String[] args) {
//调用WeekDay对象
WeekDay.Friday.show();
WeekDay.Monday.show();
}

}
class WeekDay
{
private String str = null;
//构造函数私有,不能创建新对象
private WeekDay (String str)
{
this.str = str;
}
//在类的内部生成指定对象
static final public WeekDay Monday = new WeekDay("星期一");
static final public WeekDay Tuesday = new WeekDay("星期二");
static final public WeekDay  Wednesday = new WeekDay("星期三");
static final public WeekDay  Thursday = new WeekDay("星期四");
static final public WeekDay Friday = new WeekDay("星期五");
static final public WeekDay Saturday = new WeekDay("星期六");
static final public WeekDay Sunday = new WeekDay("星期天");
void show()
{
System.out.println(str);
}
}


运行结果:



在程序中,我们达到了只能建立若干个可用对象的目的,有效提高了程序的安全性。在上面的类的基础上我们改写,增加该类的功能,因为一周的天数对象是有顺序的,所以我们加进了获得下可以获得下一天的方法。

/**
* 编写一个可以表示一周内所以天数的类
*可以获得下一对象
*/
public class EnumTest1 {

public static void main(String[] args) {
//调用WeekDay对象
WeekDay.Friday.show();
WeekDay.Monday.show();
//获得下一天
WeekDay  day = WeekDay.Monday.nextDay();
day.show();
}

}
//定义一周的天数的抽象的类
abstract class  WeekDay
{
private String str = null;
//构造函数私有,不能创建新对象
private WeekDay (String str)
{
this.str = str;
}
//在类的内部生成指定对象
static final public WeekDay Monday = new WeekDay("星期一"){
//重写nextDay
@Override
public WeekDay nextDay() {

return WeekDay.Tuesday;
}};
static final public WeekDay Tuesday = new WeekDay("星期二"){

@Override
public WeekDay nextDay() {

return WeekDay.Wednesday;
}};
static final public WeekDay  Wednesday = new WeekDay("星期三"){

@Override
public WeekDay nextDay() {

return WeekDay.Thursday;
}};
static final public WeekDay  Thursday = new WeekDay("星期四"){

@Override
public WeekDay nextDay() {

return WeekDay.Friday;
}};
static final public WeekDay Friday = new WeekDay("星期五"){

@Override
public WeekDay nextDay() {

return WeekDay.Saturday;
}};
static final public WeekDay Saturday = new WeekDay("星期六"){

@Override
public WeekDay nextDay() {

return WeekDay.Sunday;
}};
static final public WeekDay Sunday = new WeekDay("星期天"){

@Override
public WeekDay nextDay() {

return WeekDay.Monday;
}};
void show()
{
System.out.println(str);
}
//抽象方法,在每一个对象重写该方法
//作用是获得下一天
abstract public WeekDay nextDay();

}


执行效果:



在程序中我们用到了抽象方法,因为每一个对象获得下一对象的方法不同,所以要求每一个对象建立时重写NextDay方法。

在上面的两个程序中,我们用普通的方法的编写了具有限定建立对象值得类,该类只有若干个可用对象,并且这些对象有一定的顺序,有可以获得下一个对象的方法。上述编写的程序较为复杂,为了程序的编写的简单,Java中把具有上面功能的类定义为了特殊的类型——枚举, 现在通过一个简单的枚举说明枚举的的定义。

/**
* 定义枚举类
*
*/
public class EnumTest2 {

public static void main(String[] args) {
//调用WeekDay对象
WeekDayEnum.Friday.show();
WeekDayEnum.Monday.show();
WeekDayEnum day = WeekDayEnum.Saturday;
System.out.println(day.name(
b117
));
//枚举提供的部分方法
System.out.println(day.ordinal());
System.out.println(day.getClass());
}

}
//定义一个枚举类
enum WeekDayEnum
{
//生成指定对象

Monday("星期一"),
Tuesday("星期二"),
Wednesday("星期三"),
Thursday("星期四"),
Friday("星期五"),
Saturday("星期六"),
Sunday("星期日");
private String str = null;
private WeekDayEnum(String str)
{
this.str = str;
}

public void show()
{
System.out.println(str);
}
}


运行效果



在上面的程序与第一个程序具有相同的作用,只是这次用枚举编写的程序,编写的过程比第一个程序简单,所以说枚举的作用与普通类有着相同的作用,但是代码更加简单化。同时枚举类型还提供了一些方法,方便枚举的操作。主要可用的方法有ordinal、name和getDeclaringClass。方法ordinal返回枚举项在枚举对象中的序号;方法name则返回枚举项的名称(与方法toString效果相同),通常用于取得枚举变量中保存的枚举项名称;而方法getDeclaringClass则用于取得当前枚举值所在类的完整称。

注意,对象必须在类的前面。

在程序二中我增加了获得下一个对象的方法,现在我们用枚举重新改程序,进一步加深对枚举的理解:

public class EnumTest2 {

public static void main(String[] args) {
//获得下一个对象
WeekDayEnum day = WeekDayEnum.Wednesday.NextDay();
System.out.println(day.name());
}

}
//定义一个枚举类
enum WeekDayEnum
{
//生成指定对象
Monday("星期一") {
//重写NextDay方法
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Tuesday;
}
},

Tuesday("星期二") {
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Wednesday;
}
},
Wednesday("星期三") {
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Thursday;
}
},
Thursday("星期四") {
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Friday;
}
},
Friday("星期五") {
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Saturday;
}
},
Saturday("星期六") {
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Saturday;
}
},
Sunday("星期日") {
@Override
public WeekDayEnum NextDay() {
// TODO Auto-generated method stub
return Monday;
}
};
private String str = null;
private WeekDayEnum(String str)
{
this.str = str;
}
//抽象方法
public abstract WeekDayEnum NextDay();

public void show()
{
System.out.println(str);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: