java枚举泛型.docx
- 文档编号:26304058
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:30
- 大小:48.78KB
java枚举泛型.docx
《java枚举泛型.docx》由会员分享,可在线阅读,更多相关《java枚举泛型.docx(30页珍藏版)》请在冰豆网上搜索。
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
枚举类的主要操作方法:
No.
方法
类型
描述
1
protectedEnum(Stringname,intordinal)
构造
接收枚举的名称和枚举的常量创建枚举对象
2
protectedfinalObjectclone()
throwsCloneNotSupportedException
普通
克隆枚举对象
3
publicfinalintcompareTo(Eo)
普通
对象比较
4
publicfinalbooleanequals(Objectother)
普通
比较两个枚举对象
5
publicfinalinthashCode()
普通
返回枚举常量的哈希码
6
publicfinalStringname()
普通
返回此枚举的名称
7
publicfinalintordinal()
普通
返回枚举常量的序数
8
publicstatic
普通
返回带指定名称的指定枚举类型的枚举常量
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()){
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 枚举