




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章泛型与枚举1教学目标(1) 掌握泛型概念(2) 掌握泛型集合和泛型类使用(3) 理解泛型方法及用法(4) 掌握枚举使用2内容39.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因内容49.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因用户在使用集合处理对象时,经常需要进行强制类型转换,这很容易带来类型转换异常问题。为此,Java设计了泛型机制将代码的类型检查提前到了编译期间进行,为类型安全提供保证。在泛型出现之前,Java使用Object类来实现泛型编程。例如,ArrayList通过维护一个Object引用数组来实现泛型。59.1.1泛型引入的原因publicclassArrayList{privateObject[]elementData;publicObjectget(inti){…….}publicvoidadd(Objectc){……..}}69.1.1泛型引入的原因当获取一个值时必须进行强制类型转换。ArrayListlist=newArrayList();............Stringfilename=(String)list.get(0);另外,这里没有错误检查,可以向数组列表中添加任何类型的值。list.add("hello");list.add(newFile("....."));对于上面调用,编译和运行都不会出错。不过在其他地方,如果将get的结果强制类型转换为String类型,就会产生一个错误,例如:Stringstr=(String)list.get(0);Stringstr1=(String)list.get(1);当执行这句话时Stringstr1=(String)list.get(1),会报如下错误:java.lang.ClassCastException:java.io.Filecannotbecasttojava.lang.String79.1.1泛型引入的原因Java泛型机制提供了一个更好的解决方案:类型参数(TypeParameter)。例如,在ArrayList类里,使用类型参数用来指定元素的类型,例如:ArrayList<String>files=newArrayList<String>();这样使得代码具有更好的可读性,人们一看便知道该数组列表中包含的是String对象。编译器也可以充分利用这个类型参数信息,在调用get的时候,不需要进行强制类型转换。编译器知道返回值类型为String而不是Object,例如:Stringfilename=files.get(0);89-1判断正误:泛型将类型进行参数化,是一种类型安全机制。正确错误AB提交单选题1分内容99.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因109.1.2泛型类泛型类是一种允许在类中使用类型参数的类。通过泛型类,可以创建具有通用性的类,可以在不同类型之间共享相同的代码结构,同时保持类型安全性。在定义泛型类时,可以在类名后面使用尖括号(<>)来指定一个或多个类型参数,这些类型参数可以在类的方法和字段中使用,使得类的行为可以适应不同的数据类型。对具有一个类型参数的泛型类,定义一般形式如下:
修饰符class类名<T>{//类体}//示例:FirstGenericEg.javaT表示一种引用数据类型,是泛型的类型参数类型参数通常使用大写字母表示,常用的有:T、E、K、V、U等。通常,E表示元素(Element),多用于Java集合框架,K和V分别表示表的关键字(Key)和值(Value),N表示数字(Number),T表示任意类型(Type)。119-2定义具有一个类型参数的泛型类,其语法格式正确的是()修饰符class类名<T>{//类体}修饰符class<T>类名{//类体}
修饰符(T)class类名{//类体}修饰符class类名(T)(//类体)
ABCD提交单选题1分内容129.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因泛型接口与泛型类类似,允许在接口中使用类型参数。通过泛型接口,可以创建具有通用性的接口,以适应不同类型的实现类。使用泛型接口可以提高代码的灵活性和可重用性,同时确保类型安全。139.1.3泛型接口
具有一个参数的泛型接口,其定义一般形式如下:修饰符interface接口名<T>{//接口体}
示例代码:BrotherPrinter.java上面示例是使用泛型类对泛型接口进行实现,那么不使用泛型类是否可以实现泛型接口呢?答案是可以的。只要在实现泛型接口时,用确定的引用类型去替代T就可以。示例:StringPrinter.java149.1.3泛型接口上面代码中指明了泛型接口中T的具体类型是String,在实现接口中的抽象方法时,也要把类型参数T替换为String。
159-3定义如下接口,泛型实现正确的是()
interfaceDao<T>{publicvoidadd(Tt);}publicclassMyinterf<T>implementsDao<T>{//类体}publicclassMyinterfimplementsDao{//类体}publicclass<T>MyinterfimplementsDao{//类体}publicclassMyinterf(T)implementsDao<T>{//类体}ABCD提交单选题1分内容169.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因如果类和接口没有定义泛型,但是想在方法中使用泛型,例如在方法中接收一个泛型参数,此时可以将该方法定义为泛型方法,泛型方法定义的一般形式如下:
访问修饰符<T>返回值类型方法名(方法参数){//方法体}
179.1.4泛型方法示例代码:GenericMethodDemo.java在使用泛型方法时,需要注意以下方面:用于放置类型参数的<>应出现在方法的其他所有修饰符之后,并在方法的返回值类型之前,类型参数通常用单个大写字母表示;只有引用类型才能作为泛型方法的类型参数;构造方法、实例方法、静态方法都可以使用泛型;一个方法可有多个类型参数,多个类型参数之间用逗号分开。
189.1.4泛型方法199-4
定义泛型方法,下面代码调用后输出什么?public
static<E>voidprintArray(E[]inputArray){System.out.print(inputArray[0]+"");}printArray(newString[]{"A","B"});printArray(newDouble[]{2.4,3.5});A2.4B2.5AB2.42.5ABABCD提交单选题1分内容209.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因在Java中,可以通过staticfinal来定义常量。如果需要定义周一到周日这7个常量,可以用7个不同的int值表示:
219.2.1枚举引入的原因publicclassWeekday{
publicstaticfinalintSUN=0;
publicstaticfinalintMON=1;
publicstaticfinalintTUE=2;
publicstaticfinalintWED=3;
publicstaticfinalintTHU=4;
publicstaticfinalintFRI=5;
publicstaticfinalintSAT=6;}229.2.1枚举引入的原因
无论是int常量还是String常量,使用这些常量来表示一组枚举值时,会有一个潜在的问题,即编译器无法检查每个值的合理性。例如,
if(weekday==6||weekday==7){
//dosomething
}
上述代码编译和运行均不会报错,但还存在问题,Weekday定义的常量范围是0~6,并不包含7,编译器无法检查不在枚举中的int值。239.2.1枚举引入的原因为了让编译器能自动检查某个值是否在枚举集合内,可以使用enum关键字来定义枚举类。通过枚举机制,编译器可以在编译期自动检查出可能的潜在错误。枚举是自定义类型的一个类,用来限制可能的取值,从而降低出错机率。由于枚举类型的变量只能被赋予预定义的值,因此使用枚举可以减少类型错误的发生,提高代码的安全性。枚举可以用来定义一组相关的常量,这些常量在编译时被确定,并且在运行时不能更改,这有助于提高代码的可读性和安全性。示例代码:SimpleEnumDemo.java
249.2.1枚举引入的原因与采用int定义的常量相比,使用枚举,编译器会自动检查出类型错误。例如,下面的代码在比较整数值和枚举类型常量时会出错。
intday=1;
if(day==Weekday.SUN){
//编译错误 //Compileerror:badoperandtypesforbinaryoperator'==‘
}
内容259.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.2枚举的定义9.2.3枚举与接口9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因269.2.2枚举的定义枚举是一个枚举值的列表,每个枚举值都是一个合法标识符,通常标识符全部用大写字母,枚举值之间用逗号(,)隔开。枚举类型定义的简洁形式如下:enum枚举名{枚举值1,枚举值2,…,枚举值n}
例如,下面语句定义了枚举类型Level:
enumLevel{LOW,MEDIUM,HIGH}
Level是枚举类型名称,枚举值LOW、MEDIUM、HIGH类似于常量,在引用枚举值时,必须使用枚举类型名称作为限定词。下面语句定义了一个枚举类型变量:
Levelmylevel=Level.LOW;
279.2.2枚举定义Java语言把枚举类型作为一个特殊的类对待,因此,枚举类型变量是一个引用变量。所有枚举类型都默认扩展一个抽象类java.lang.Enum,该抽象类Enum是Object类的子类,实现了Comparable接口和Serializable接口。枚举类型继承Object类的所有方法,实现了接口Comparable的compareTo方法,能够被序列化。Enum中定义了两个常用方法:
(1)publicStringname():返回枚举常量的名字。
(2)publicintordinal():返回和枚举值关联的序号值。示例:LevelEnumsDemo.java
289-5定义枚举类的关键字是()?EnumenumenumsEnumsABCD提交单选题1分299-6枚举值之间用()隔开逗号,分号;冒号:括号[]ABCD提交单选题1分309-7枚举类的哪个方法返回一个包含全部枚举值的枚举类型数组?name()compareTo()ordinal()values()ABCD提交单选题1分319-8哪个方法返回枚举常量的名字?name()compareTo()valueOfvalues()ABCD提交单选题1分内容329.1泛型9.1.1泛型引入的原因9.1.2泛型类9.1.3泛型接口9.2.3枚举与接口9.2.2枚举的定义9.2.4枚举与if、switch9.1.4泛型方法9.2枚举9.2.1枚举引入的原因9.2.3枚举与接口枚举和Java类一样,也可以实现一个接口。示例:ColorEnum.java上面代码定义了一个接口ColorPrinter,通过枚举类型ColorEnum实现了该接口,并实现了该接口的抽象方法print()。下面代码示范如何使用枚举类型ColorEnum,代码:TestColorEnum.java
33349-9定义如下接口,下面用枚举实现接口语法正确的是()interfaceColorPrinter{voidprint();}public
enumColorEnumimplementsColorPrin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管道工程绿色施工技术创新实践与发展动态考核试卷
- 空调系统的故障树分析考核试卷
- 焙烤食品制造食品安全风险识别与控制考核试卷
- 批发业品牌故事与内容营销考核试卷
- 文具制造业的生产流程优化与效率提升考核试卷
- 小学一年级(下)数学应用题大全
- 支原体肺炎护理业务学习 2
- 7-10 数字系统设计实例4-数字乘法器控制器设计
- 济源职业技术学院《模拟商务谈判》2023-2024学年第一学期期末试卷
- 银川市2024-2025学年六年级下学期小升初招生数学试卷含解析
- (广东二模)2025年广东省高三高考模拟测试(二)语文试卷(含答案解析)
- 湖北省武汉市2025届高中毕业生四月调研考试历史试题及答案(武汉四调)
- 2025-2030中国类脑计算行业市场发展现状及建设案例与发展趋势研究报告
- 2025-2030中国磁悬浮发电机行业市场现状分析及竞争格局与投资发展研究报告
- 2024年四川宜宾环球集团有限公司招聘考试真题
- SL631水利水电工程单元工程施工质量验收标准第3部分:地基处理与基础工程
- 2025时政试题及答案(100题)
- DB11-T 765.4-2010 档案数字化规范 第4部分:照片档案数字化加工
- 华南理工大学自主招生个人陈述自荐信范文
- 输血常见不良反应及处理培训
- 2024年建筑业10项新技术
评论
0/150
提交评论