java枚举泛型.docx

上传人:b****6 文档编号:13824346 上传时间:2023-06-17 格式:DOCX 页数:30 大小:48.78KB
下载 相关 举报
java枚举泛型.docx_第1页
第1页 / 共30页
java枚举泛型.docx_第2页
第2页 / 共30页
java枚举泛型.docx_第3页
第3页 / 共30页
java枚举泛型.docx_第4页
第4页 / 共30页
java枚举泛型.docx_第5页
第5页 / 共30页
java枚举泛型.docx_第6页
第6页 / 共30页
java枚举泛型.docx_第7页
第7页 / 共30页
java枚举泛型.docx_第8页
第8页 / 共30页
java枚举泛型.docx_第9页
第9页 / 共30页
java枚举泛型.docx_第10页
第10页 / 共30页
java枚举泛型.docx_第11页
第11页 / 共30页
java枚举泛型.docx_第12页
第12页 / 共30页
java枚举泛型.docx_第13页
第13页 / 共30页
java枚举泛型.docx_第14页
第14页 / 共30页
java枚举泛型.docx_第15页
第15页 / 共30页
java枚举泛型.docx_第16页
第16页 / 共30页
java枚举泛型.docx_第17页
第17页 / 共30页
java枚举泛型.docx_第18页
第18页 / 共30页
java枚举泛型.docx_第19页
第19页 / 共30页
java枚举泛型.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java枚举泛型.docx

《java枚举泛型.docx》由会员分享,可在线阅读,更多相关《java枚举泛型.docx(30页珍藏版)》请在冰点文库上搜索。

java枚举泛型.docx

java枚举泛型

第4章枚举和泛型

---6.1枚举

---6.2泛型

1知识点

1.1上次内容

1.Java异常处理

1.2习题讲解

1.求int型数组元素的平均值。

(提示:

存在空对象异常和除数为0等潜在错误,要求使用异常进行处理。

(参考教材128页)

packagecn.xit.java;

publicclassavgDemo{

privatestaticint[]a=newint[]{};

privatestaticintsum=0;

privatestaticdoubleavg;

publicstaticvoidmain(Stringargs[]){

for(inti:

a){

sum+=i;

}

try{

avg=sum/a.length;

}catch(Exceptione){

e.printStackTrace();

}

System.out.println(avg);

}

}

1.3本次内容

〖知识点〗

1.枚举

2.泛型

〖了解〗

1.枚举扩展

【重点】

1.泛型

2.枚举

〖难点〗

1.泛型

2.枚举

2具体内容

6.1枚举

在实际编程中,往往存在着这样的“数据集”,它们的数值在程序中是稳定的,而且“数据集”中的元素是有限的。

例如:

星期一到星期日七个数据元素组成了一周的“数据集”,春夏秋冬四个数据元素组成了四季的“数据集”。

在java中如何更好的使用这些“数据集”呢?

因此枚举便派上了用场。

6.1.1枚举简介

³在JDK1.5之前,JAVA可以有两种方式定义新类型:

类和接口。

对于大部分面向对象编程来说,这两种方法看起来似乎足够了。

³但是在一些特殊情况下,这些方法就不适合。

例如,想定义一个Color类,它只能有Red、Green、Blue三种值,其他的任何值都是非法的,那么JDK1.5之前虽然可以构造这样的代码,但是要做很多的工作,也有可能带来各种不安全的问题。

而JDK1.5之后引入的枚举类型(Enum)就能避免这些问题。

枚举就是规定好了指定的取值范围,所有的内容只能从指定的范围中取得,也就是一个类只能产生固

定的几个对象。

范例:

使用定义类实现枚举操作。

classColor{

publicstaticfinalColorRED=newColor("红色");//定义第一个对象

publicstaticfinalColorGREEN=newColor("绿色");//定义第二个对象

publicstaticfinalColorBLUE=newColor("蓝色");//定义第三个对象

privateStringname;

privateColor(Stringname){//构造方法私有化,同时设置颜色的名称

this.setName(name);//为颜色的名字赋值

}

publicStringgetName(){//取得颜色名称

returnthis.name;

}

publicvoidsetName(Stringname){//设置颜色名称

this.name=name;

}

publicstaticColorgetInstance(inti){//得到一个颜色,只能从固定的几个颜色中取得

switch(i){

case1:

{//返回红色对象

returnRED;

}case2:

{//返回绿色对象

returnGREEN;

}case3:

{//返回蓝色对象

returnBLUE;

}default:

{

returnnull;//错误的值

}}}}

范例:

使用接口表示一组范围

packagecn.xit.java;

publicinterfaceColor{

publicstaticfinalintRED=1;//表示红色

publicstaticfinalintGREEN=2;//表示绿色

publicstaticfinalintBLUE=3;//表示兰色

}

publicclassColorDemo02{

publicstaticvoidmain(String[]args){

System.out.println(Color.RED+Color.GREEN);//颜色相加

}

}

6.1.2定义一个枚举类型

³在JDK1.5之后,引入了一个新的关键字类型——enum,可以直接定义枚举类型,格式如下:

[public]enum枚举类型名称{

枚举对象1,枚举对象2,…,枚举对象n;

}

范例:

定义一个Color的枚举类型。

packagecn.xit.java;

publicenumColor{//定义枚举类型

RED,GREEN,BLUE;//定义枚举的三个类型

}

范例:

枚举操作。

publicclassGetEnumContent{

publicstaticvoidmain(String[]args){

Colorc=Color.BLUE;//取出蓝色

System.out.println(c);//输出信息

/*使用foreach输出枚举内容*/

for(Colorc:

Color.values()){//枚举.values()表示得到全部枚举的内容

System.out.println(c);//输出枚举内容

}

/*使用switch进行判断*/

publicstaticvoidprint(Colorcolor){

switch(color){//判断每个颜色

caseRED:

{//直接判断枚举内容

System.out.println("红颜色");

break;

}caseGREEN:

{//直接判断枚举内容

System.out.println("绿颜色");

break;

}caseBLUE:

{//直接判断枚举内容

System.out.println("蓝颜色");

break;

}default:

{//未知内容

System.out.println("未知颜色");

break;

}

}

}

}

}

6.1.3Enum

使用enum关键字可以定义一个枚举。

实际上此关键字表示的是java.lang.Enum类型,即:

使用enum声明的枚举类型,就相当于定义一个类,而此类默认继承java.lang.Enum类。

java.lang.Enum类的定义如下:

publicabstractclassEnum>

extendsObject

implementsComparable,java.io.Serializable

枚举类的主要操作方法:

No.

方法

类型

描述

1

protectedEnum(Stringname,intordinal)

构造

接收枚举的名称和枚举的常量创建枚举对象

2

protectedfinalObjectclone()

throwsCloneNotSupportedException

普通

克隆枚举对象

3

publicfinalintcompareTo(Eo)

普通

对象比较

4

publicfinalbooleanequals(Objectother)

普通

比较两个枚举对象

5

publicfinalinthashCode()

普通

返回枚举常量的哈希码

6

publicfinalStringname()

普通

返回此枚举的名称

7

publicfinalintordinal()

普通

返回枚举常量的序数

8

publicstatic>TvalueOf(ClassenumType,Stringname)

普通

返回带指定名称的指定枚举类型的枚举常量

protectedEnum(Stringname,intordinal)

6.1.4取得枚举的信息

枚举类的构造方法:

protectedEnum(Stringname,intordinal);

在枚举类建立完成之后,实际上都会为其调用枚举类中的构造方法,为其赋值,在Enum类的构造方法中的第一个参数name就是定义的枚举的名称,第二个参数ordinal则会从0开始依次进行编号。

之后可以使用Enum类中提供的name()和ordinal()方法取得名字和编号。

范例:

获取枚举的信息(编号和名称)

packagecn.xit.java;

enumColor{

RED,GREEN,BLUE;

}

publicclassHelloDemo{

publicstaticvoidmain(Stringargs[]){

for(Colorc:

Color.values()){

System.out.println(c.ordinal()+"---->"+c.name());

}

}

}

6.1.5为枚举类的每一个对象赋值

可以通过构造方法和setter方法两种方式为枚举中的每个属性赋值:

³每个枚举类中都有其指定好的若干对象,当然,每一个枚举对象中也可以包含多个属性。

而这些属性也可以通过构造方法为其赋值。

³也可以通过调用setter()的方式为指定的属性赋值,但是必须明确每一个枚举类的对象。

如果操作的对象是RED,则名字应该为“红色”,如果操作的对象是GREEN,则名字应该为“绿色”等。

范例:

通过构造方法为属性赋值

packagecn.xit.java;

enumColor{

RED("红色"),GREEN("绿色"),BLUE("兰色");//定义枚举的三个类型

privateColor(Stringname){//定义构造方法

this.setName(name);//设置名字

}

privateStringname;//定义name属性

publicStringgetName(){//取得name属性

returnname;

}

publicvoidsetName(Stringname){//设置name属性

this.name=name;

}

}

publicclassHelloDemo{

publicstaticvoidmain(String[]args){

for(Colorc:

Color.values()){//枚举.values()表示得到全部枚举的内容

System.out.println(c.ordinal()

+"-->"+c.name()

+"("+c.getName()+")");//输出

}

}

}

范例:

通过setter方法为属性赋值。

packagecn.xit.java;

enumColor{

RED,GREEN,BLUE;//定义枚举的三个类型

privateStringname;//定义name属性

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

switch(this){

caseRED:

{//判断是否是红色

if("红色".equals(name)){

this.name=name;//设置名称

}else{

System.out.println("设置内容错误。

");

}

break;

}

caseGREEN:

{//判断是否是红色

if("绿色".equals(name)){

this.name=name;//设置名称

}else{

System.out.println("设置内容错误。

");

}

break;

}

caseBLUE:

{//判断是否是红色

if("蓝色".equals(name)){

this.name=name;//设置名称

}else{

System.out.println("设置内容错误。

");

}

break;

}

}

}

}

publicclassHelloDemo{

publicstaticvoidmain(String[]args){

Colorc=Color.BLUE;

c.setName("蓝色");

System.out.println(c.ordinal()

+"-->"+c.name()

+"("+c.getName()+")");//输出

}

}

6.1.6valueof()

如果不想通过“枚举类.对象”的形式取得每一个枚举类的对象,也可以使用Enum类定义的“枚举

类.valueof()”方法的形式进行调用。

范例:

通过valueof()方法取得枚举对象。

packagecn.xit.java;

enumColor{

RED,GREEN,BLUE;//定义枚举的三个类型

privateStringname;//定义name属性

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

switch(this){

caseRED:

{//判断是否是红色

if("红色".equals(name)){

this.name=name;//设置名称

}else{

System.out.println("设置内容错误。

");

}

break;

}

caseGREEN:

{//判断是否是绿色

if("绿色".equals(name)){

this.name=name;//设置名称

}else{

System.out.println("设置内容错误。

");

}

break;

}

caseBLUE:

{//判断是否是蓝色

if("蓝色".equals(name)){

this.name=name;//设置名称

}else{

System.out.println("设置内容错误。

");

}

break;

}

}

}

}

publicclassHelloDemo{

publicstaticvoidmain(String[]args){

//Colorc=Color.BLUE;

Colorc=Enum.valueOf(Color.class,"BLUE");

//c.setName("兰色");//设置一个错误的名字

c.setName("蓝色");//设置一个正确的名字

System.out.println(c.ordinal()+"---->"+c.name()+"("+c.getName()+")");

}

}

6.1.7综合示例

范例:

枚举综合示例。

packagecn.xit.java;

/**

*枚举用法详解

*/

publicclassHelloDemo{

/**

*1、普通枚举

*/

publicenumColorEnum{

red,green,yellow,blue;

}

/**

*2、枚举像普通的类一样可以添加属性和方法,可为它添加静态和非静态的属性或方法

*/

publicenumSeasonEnum{

//注:

枚举写在最前面,否则编译出错

spring,summer,autumn,winter;

privatefinalstaticStringposition="test";

publicstaticSeasonEnumgetSeason(){

if("test".equals(position))

returnspring;

else

returnwinter;

}

}

/**

*3、实现带有构造器的枚举

*/

publicenumGender{

//通过括号赋值,而且必须带有一个参构造器和一个属性跟方法,否则编译出错

//赋值必须都赋值或都不赋值,不能一部分赋值一部分不赋值;如果不赋值则不能写构造器,赋值编译也出错

MAN("MAN"),WOMEN("WOMEN");

privatefinalStringvalue;

//构造器默认也只能是private,从而保证构造函数只能在内部使用

Gender(Stringvalue){

this.value=value;

}

publicStringgetValue(){

returnvalue;

}

}

/**

*订单状态

*4、实现带有抽象方法的枚举

*/

publicenumOrderState{

/**已取消*/

CANCEL{publicStringgetName(){return"已取消";}},

/**待审核*/

WAITCONFIRM{publicStringgetName(){return"待审核";}},

/**等待付款*/

WAITPAYMENT{publicStringgetName(){return"等待付款";}},

/**正在配货*/

ADMEASUREPRODUCT{publicStringgetName(){return"正在配货";}},

/**等待发货*/

WAITDELIVER{publicStringgetName(){return"等待发货";}},

/**已发货*/

DELIVERED{publicStringgetName(){return"已发货";}},

/**已收货*/

RECEIVED{publicStringgetName(){return"已收货";}};

publicabstractStringgetName();

}

publicstaticvoidmain(String[]args){

//枚举是一种类型,用于定义变量,以限制变量的赋值;赋值时通过“枚举名.值”取得枚举中的值

ColorEnumcolorEnum=ColorEnum.blue;

switch(colorEnum){

casered:

System.out.println("colorisred");

break;

casegreen:

System.out.println("colorisgreen");

break;

caseyellow:

System.out.println("colorisyellow");

break;

caseblue:

System.out.println("colorisblue");

break;

}

//遍历枚举

System.out.println("遍历ColorEnum枚举中的值");

for(ColorEnumcolor:

ColorEnum.values()){

System.out.println(color);

}

//获取枚举的个数

System.out.println("ColorEnum枚举中的值有"+ColorEnum.values().length+"个");

//获取枚举的索引位置,默认从0开始

System.out.println(ColorEnum.red.ordinal());//0

System.out.println(ColorEnum.green.ordinal());//1

System.out.println(ColorEnum.yellow.ordinal());//2

System.out.println(ColorEnum.blue.ordinal());//3

//枚举默认实现了java.lang.Comparable接口

System.out.println(ColorEpareTo(ColorEnum.green));//-1

//--------------------------

System.out.println("===========");

System.err.println("季节为"+SeasonEnum.getSeason());

//--------------

System.out.println("===========");

for(Gendergender:

Gender.values()){

System.out.println(gender.value);

}

//--------------

System.out.println("===========");

for(OrderStateorder:

OrderState.values()){

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 总结汇报 > 学习总结

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2