黑马程序员-基础加强-枚举

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

 基础加强-枚举
一,myeclipse 是eclipse的一个插件。eclipse是一个ide集成开发环境。
二,简写:
IDE:integrated development environment  集成开发环境

三,透视图就是一些不同的小窗口的集合
四。导入工程:
1,先把工程文件复制到eclipse的工作台目录下。
2,然后使用eclipse的import 进行导入

五,枚举(Enumeration)


1,为什么要有枚举?
枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个,否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的
非法值,普通变量的方式在开发阶段无法实现这一目标的。

2,如果使用普通类来实现枚举功能,定义一个WeeKday的类?
1,将构造函数私有
2,每个元素分别用一个公有的静态全局变量表示本类对象(使用 public static final 类名 变量名 定义全局变量)
3,可以有若干公有方法或抽象方法,
例如:要提供nextDay方法必须是抽象的。返回值类型为本类类型(自定义枚举类类型) 采用抽象方法定义nextDay就是将大量的if.else语句转移成了一个个独立的类
提供String toString()方法,也必须是抽象的 。返回这个对象的值。

自定义枚举类定义的对象只能有规定的那个几个值,不可以有其它的值。

个人理解:
就是定义一个类,将其构造函数私有化。在本类创建对象。(有点单例思想,不过人家单例是一个对象,枚举是多个对象)然后在类中定义一个全局变量,并且这个变量的值就是本类对象也就可以说是一个子类。
在自定义类中定义一些方法比如nextObject方法,toString()方法,nextObject方法是用来取出下一个对象。可以定义在父类中,但
是定义在父类中还要进行对象判断,才能进行获取下一对象。因为每个子类对象都有的方法,并且取出的每一个对象都不相同,
所以可以将这个nextObject方法抽象化,让其子类去实现,指定要返回的下一个对象。toString方法也是一样,每个子类对象所对的值都不一样,
只有子类自己最清楚要返回什么的值,所以也可以将其抽象,让其子类去实现,因为此类有抽象方法,所以此父类也必须为抽象类。
而全局变量指向的本类对象也不需要什么名字,只是指向一个实体对象罢了。只要把父类中的抽象方法实现就行,所以使用匿名内部类来完成。也可以在父类中定义一个类继承
其父类复写其方法,然后在建立对象赋值给全局变量,不过有点麻烦。
 
代码:
public abstract class DefineEnumeration {

//在这个类中定义类类型的全局变量,并将赋值为本类对象
public final static DefineEnumeration RED = new DefineEnumeration(){
//复写父类中的抽象方法
public DefineEnumeration nextObject(){
return GREEN;
}
public String toString(){
return "liuce+red";
}
};

public final static DefineEnumeration GREEN= new DefineEnumeration(){


@Override
public DefineEnumeration nextObject() {
// TODO Auto-generated method stub
return YELLOW;
}


@Override
public String toString() {
// TODO Auto-generated method stub
return "liuce+green";
}};
public final static DefineEnumeration YELLOW = new DefineEnumeration(){


@Override
public DefineEnumeration nextObject() {
// TODO Auto-generated method stub
return RED;
}


@Override
public String toString() {
// TODO Auto-generated method stub
return "liuce+yellow";
}};

//因为每个子类都有一个可以获取一下对象的方法,并且获取的对象是不一样,可以将其定义在父类中,
///将其抽象化,让其子类去实现,就不用判断了可以直接返回下一对象
public abstract DefineEnumeration nextObject();
//定义一个可以返回子类对象的值的方法,让其子类进行实现
public abstract String toString();
3,枚举的基本应用
1,定义枚举的格式 :
修饰符  enum(关键字) 类名{
元素1,元素2,元素3,...结尾没有分号(元素也就是我们自定义类的全局变量,代表本类的对象)
}
使用enum定义的枚举类不用在写toString方法了,系统已经为我们定义好了,其返回值就是元素的名字与元素中的name()方法的返回一样。

2,枚举中的一些方法:
元素的方法:
String toString():返回此元素的字符串形式,也就是它的名字。
String name():返回此元素的名字与toString方法返回值一样。
int ordinal():返回自己在父类中的排行。 从0开始计算
boolean equals(Object othe):比较是否是同一元素
int compareTo(Object obj):比较大小
枚举类的静态方法:
static T valueOf(String args):参数为一个元素的名字,此方法会返回一个与参数名字相对应的T类型的对象(一般是元素)
static T[] value():返回这个枚举类中的所有元素的数组 对枚举中的元素进行遍历

注:自定义枚举类没有这些静态方法,自定义的方法也要位于元素之后,如果有自定方法的话,最后一个元素要以;结束.元素默认是调用无参数的构造方法
如果想调用有参数的构造方法可以在元素后加(),在括号里面传入与参数类型(父类的构造方法的参数)相同的实际参数就可以了。当没有参数时
也可以加上(),不加也可以。

枚举是一种特殊的类,其中的每个元素都是该类的一个实例对象,。


2,定义枚举的构造方法
注意:方法必须在元素之后,并且元素是以;结束的,此构造方法为必须为私有的,(防止其他类建立本类对象)
格式:
private 类名(参数列表){}
3,复写父类中的抽象方法
格式:元素{复写父类的抽象方法},元素{复写父类中的抽象方法},元素{复写抽象方法};
如果有需要参数传入时:元素(实际参数){复写父类听抽象方法},

4,定义成员变量
prvate 类型 变量名

注:当枚举只有一个成员时,就可以作为一种单例的实现方式。
代码:
public enum TrafficLamp {

//定义元素,代表本类对象,并复写父类中的抽象方法,因为自定了构造 函数,默认空参数的构造函数没有了,所以都要传入实际的数值
RED (40){
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return GREEN;
}
},GREEN(20) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return YELLOW;
}
},YELLOW(10) {
@Override
public TrafficLamp nextLamp() {
// TODO Auto-generated method stub
return RED;
}
};
//给类定义一个变量用来存储时间的,将私有,可以提供对外的访问方法
private int time;
//定义一个构造方法,它的修饰符为私有的,为了不让其它 的类创建对象
private TrafficLamp(int time){
this.time = time;
}
//定义可以返回下一个灯的抽象方法让其子类实现,返回值是父类,父类引用指向子类对象
public abstract TrafficLamp nextLamp();
}

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值