第2章Java5语言新特性

上传人:公**** 文档编号:579027651 上传时间:2024-08-25 格式:PPT 页数:38 大小:292.54KB
返回 下载 相关 举报
第2章Java5语言新特性_第1页
第1页 / 共38页
第2章Java5语言新特性_第2页
第2页 / 共38页
第2章Java5语言新特性_第3页
第3页 / 共38页
第2章Java5语言新特性_第4页
第4页 / 共38页
第2章Java5语言新特性_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《第2章Java5语言新特性》由会员分享,可在线阅读,更多相关《第2章Java5语言新特性(38页珍藏版)》请在金锄头文库上搜索。

1、第第2章章Java5语言新特性语言新特性 n(学时数:学时)学习要点:学习要点:n1了解了解java5.0新语言特性包括哪几个方面。新语言特性包括哪几个方面。n2了解了解java5.0中增强的中增强的for循环循环。n3了解了解java5.0的注释新特性的注释新特性。n4掌握枚举掌握枚举。n5.掌握范型掌握范型。n6.掌握类型自动转换掌握类型自动转换。n7.了解静态导入了解静态导入n8.了解格式化输入与输出了解格式化输入与输出。第第2章章Java5语言新特性语言新特性n1.1新语言特性总览新语言特性总览n1.2增强的增强的for循环循环n1.3注释注释n1.4枚举枚举n1.5范型范型n1.6类

2、型自动转换类型自动转换n1.7静态导入静态导入n1.8格式化输入与输出格式化输入与输出1.1新语言特性总览新语言特性总览n1.1.1Java5.0的诞生的诞生n1.1.2Java5.0的新语言特性的新语言特性1.2增强的增强的for循环循环n1.2.1Init表达式表达式n1.2.2局限性局限性1.3注释注释n1.3.1注释的作用注释的作用n1.3.2用户自定义标签用户自定义标签n1.3.3获取注释信息获取注释信息1.4枚举枚举n1.4.1enum类型特征类型特征n1.4.2使用使用enum类型类型1.5范型范型n1.5.1类型安全类型安全n1.5.2范型定义范型定义n1.5.3声明范型类和类

3、型参数声明范型类和类型参数n1.5.4声明范型接口和多个类型参数声明范型接口和多个类型参数1.6类型自动转换类型自动转换n1.6.1类型自动转换类型自动转换1.7静态导入静态导入n1.7.1静态导入静态导入1.8格式化输入与输出格式化输入与输出n1.8.1格式化输出格式化输出n1.8.2格式化输入格式化输入Java5.0的诞生的诞生n时间:时间:2004年年10月月n版本名称不是版本名称不是Java1.5而是而是Java5.0的原因的原因?从从Java诞生至今已有诞生至今已有9年时间,而从有年时间,而从有J2SE算算起也有起也有5个年头了;在这样的背境下,将该版个年头了;在这样的背境下,将该版

4、本号从本号从1.5改为改为5.0可以更好的反映出新版的可以更好的反映出新版的Java技术的成熟度、稳定性、可伸缩性、安全技术的成熟度、稳定性、可伸缩性、安全性。性。nJava5.0的目标的目标:通过增强:通过增强Java平台的力量,平台的力量,允许开发者更容易地使用,允许开发者更容易地使用,Java编程语言的这编程语言的这些改进将吸引大量各种些改进将吸引大量各种Java开发者开发者。Java5.0的新特性的新特性n范型范型:添加编译时类型来检查您的代码:添加编译时类型来检查您的代码,使用范型来,使用范型来代替所有的类型转换代替所有的类型转换。n加强的加强的For循环:在循环:在Collecti

5、on中使用循环来代替迭代中使用循环来代替迭代器器。n自动打包:无须手工打包和拆包自动打包:无须手工打包和拆包(boxandunbox)原原始类型始类型。n枚举:枚举:Java开发者开发者可以使用枚举类可以使用枚举类。n变参:方法调用之中把变参当作一系列独立的参数变参:方法调用之中把变参当作一系列独立的参数。n静态导入:静态倒入(静态导入:静态倒入(StaticImport)特征允许您导)特征允许您导入所有静态类的成员到您的代码中,并且可以通过简入所有静态类的成员到您的代码中,并且可以通过简短和非限制的名称来引用这些常量和方法。短和非限制的名称来引用这些常量和方法。n评注评注:提供了一个代码运行

6、时可访问的信息:提供了一个代码运行时可访问的信息。n国际化:国际化:Unicode4.0的支持的支持。n质量:稳定性、强壮性和兼容性质量:稳定性、强壮性和兼容性Init表达式表达式n在循环中,初始化表达式只计算一次在循环中,初始化表达式只计算一次未增强的未增强的For:intsum=0;Integernumbers=computeNumbers();for(inti=0;inumbers.length;i+)sum+=numbersi;增强后的增强后的For:intsum=0;for(intnumber:computeNumbers()sum+=number;局限性局限性n不可以在迭代期间访问

7、迭代器或下标。不可以在迭代期间访问迭代器或下标。例子例子1:for(inti=0;inumbers.length;i+)if(i!=0)System.out.print(,);System.out.print(numbersi);例子例子2:for(Iteratorit=n.iterator();it.hasNext();)if(it.next()0)it.remove();注释的作用注释的作用n可以被用来生成文档,检查代码间依赖关系,帮助编译器作语法可以被用来生成文档,检查代码间依赖关系,帮助编译器作语法检查。检查。n文档生成工具:文档生成工具:Xdoclet、javadocn代码检查举例:

8、代码检查举例:publicclassParentpublicvoidfoo()System.out.println(OriginalImplementationoffoo);publicclassChildextendsParentOverridepublicvoidfoo()System.out.println(OverideImplementationoffoo);注释的作用注释的作用子类想重载子类想重载foo()方法,不过用户可能一时疏方法,不过用户可能一时疏忽把它写成了忽把它写成了fob()。错误提示:错误提示:Child.java:3:methoddoesnotoverrideame

9、thodfromitssuperclassOverride1error用户自定义标签用户自定义标签用户自定义标签用户自定义标签:packagetiger.annotation;/*用户自定义标签用户自定义标签MyTag*/publicinterfaceMyTag/定义了一个定义了一个tag之后,用户就可以在任何之后,用户就可以在任何java文件中使用这个文件中使用这个tag了:了:importtiger.annotation.MyTag;publicclassTagTestMyTagpublicvoidtestTag()/注释类型还可以有成员变量:注释类型还可以有成员变量:packagetig

10、er.annotation;/*用户自定义标签,带有成员变量的用户自定义标签,带有成员变量的MyTag*/publicinterfaceMyTagStringname();intage();用户自定义标签用户自定义标签用户可以这么使用这个标签:用户可以这么使用这个标签:MyTag(name=MyTag,age=1)publicvoidtestTag()获取注释信息获取注释信息importjava.lang.annotation.Annotation;importtiger.annotation.MyTag;publicclassTagTestMyTag(name=MyTag,age=1)pub

11、licvoidtest()publicstaticvoidmain(Stringargs)TagTesttt=newTagTest();tryAnnotationannotation=tt.getClass().getMethod(test).getAnnotations();for(Annotationtag:annotation)System.out.println(Tagis:+tag);System.out.println(tag.name()+(MyTag)tag).name();System.out.println(tag.age()+(MyTag)(tag).age();catc

12、h(NoSuchMethodExceptione)e.printStackTrace();获取注释信息获取注释信息n执行执行TagTest可以得到输出如下可以得到输出如下:Tagis:tiger.annotation.MyTag(name=MyTag,age=1)tag.name()MyTagtag.age()1enum类型特征类型特征n它不能有它不能有public的构造函数的构造函数n所有枚举值都是所有枚举值都是public、static和和final的。的。n默认实现了默认实现了java.lang.Comparable接口。接口。nenum重载了重载了toString方法方法nvalueO

13、f方法,这个方法和方法,这个方法和toString方法是相方法是相对应的。对应的。nvalues方法方法noridinal方法方法使用使用enum类型类型n遍历所有枚举值:遍历所有枚举值:for(Colorc:Color.values()System.out.println(“findvalue:”+c);使用使用enum类型类型n在在enum中定义方法和变量中定义方法和变量:publicenumColorRed,Green,Blue;/定义一个变量表示枚举值的数目。定义一个变量表示枚举值的数目。privatestaticintnumber=Color.values().length;/*随机

14、返回一个枚举值随机返回一个枚举值returnarandomenumvalue.*/publicstaticColorgetRandomColor()longrandom=System.currentTimeMillis()%number;switch(int)random)case0:returnColor.Red;case1:returnColor.Green;case2:returnColor.Blue;default:returnColor.Red;使用使用enum类型类型n重载重载(Override)toString方法:方法:publicStringtoString()switch(

15、this)caseRed:returnColor.Red;caseGreen:returnColor.Green;caseBlue:returnColor.Blue;default:returnUnknowColor;类型安全类型安全n在在Java5.0之前的版本中,之前的版本中,Java程序并不是程序并不是类型安全的。类型安全的。ListstringList=newArrayList();stringList.add(abcde);Stringstr=(String)stringList.get(0);n仍然可以把一个整型对象添加到这个队列中,仍然可以把一个整型对象添加到这个队列中,例如:例

16、如:stringList.add(newInteger(5);n在这种情况下,从字符列表中获取对象时,强在这种情况下,从字符列表中获取对象时,强制类型转换就会导致运行时异常。制类型转换就会导致运行时异常。n范型是范型是Java迈向类型安全的一个重要步骤,使迈向类型安全的一个重要步骤,使用范型可以构造出类型安全的代码。用范型可以构造出类型安全的代码。范型定义范型定义n所谓范型是指类型参数化所谓范型是指类型参数化(parameterizedtypes)。Java是一种强类型的语言,在是一种强类型的语言,在J2SE1.4以及以前的版本中,我们在定义一个以及以前的版本中,我们在定义一个Java类的接口

17、或者方法的时候,必须指定变量的类类的接口或者方法的时候,必须指定变量的类型。在声明范型类、接口或者函数时,定义变型。在声明范型类、接口或者函数时,定义变量的时候不指定某些变量的具体类型,而是用量的时候不指定某些变量的具体类型,而是用一个类型参数代替。在使用这个类、接口或者一个类型参数代替。在使用这个类、接口或者方法的时候,这个类型参数由一个具体类型所方法的时候,这个类型参数由一个具体类型所代替。代替。声明范型类和类型参数声明范型类和类型参数publicclassGenListprivateTelements;privateintsize=0;privateintlength=0;publicG

18、enList(intsize)elements=(T)newObjectsize;this.size=size;publicTget(inti)if(ilength)returnelementsi;returnnull;publicvoidadd(Te)if(lengthsize-1)elementslength+=e;声明范型接口和多个类型参数声明范型接口和多个类型参数n声明范型接口:声明范型接口:publicinterfaceGenInterfacevoidfunc(Tt);n声明多个类型参数声明多个类型参数publicclassGenMap类型自动转换类型自动转换n自动装包:基本类型自动

19、转为包装类自动装包:基本类型自动转为包装类(例如:例如:intInteger)。n自动拆包:包装类自动转为基本类型自动拆包:包装类自动转为基本类型(例如:例如:Integerint)。inta=3;Collectionc=newArrayList();c.add(a);/自动转换成自动转换成Integer.Integerb=newInteger(2);c.add(b+2);/这里这里Integer先自动转换为先自动转换为int进行进行加法运算,然后加法运算,然后int再次转换为再次转换为Integer静态导入静态导入n没有静态导入时没有静态导入时Math.sqrt(Math.pow(x,2)+

20、Math.pow(y,2);n使用静态导入时使用静态导入时importstaticjava.lang.Math.*;sqrt(pow(x,2)+pow(y,2);格式化输出格式化输出publicclassTestFormatpublicstaticvoidmain(Stringargs)inta=150000,b=10;floatc=5.0101f,d=3.14f;System.out.printf(%4d%4d%n,a,b);System.out.printf(%x%x%n,a,b);System.out.printf(%3.2f%1.1f%n,c,d);System.out.printf(

21、%1.3e%1.3e%n,c,d*100);格式化输出格式化输出输出结果为:输出结果为:15000010249f0a5.013.15.010e+003.140e+02格式化输入格式化输入nJava5.0之前版本中的输入:之前版本中的输入:Stringinput=JOptionPane.showInputDialog(prompt);intn=Integer.parseInt(input);doublex=Double.parseDouble(input);s=input;n在在Java5.0中的输入:中的输入:Scannerin=newScanner(System.in);System.out

22、.print(prompt);intn=in.nextInt();doublex=in.nextDouble();Strings=in.nextLine();思考练习题思考练习题n请问请问Java5中的新语言特性有哪些?中的新语言特性有哪些?n请先阅读下面一段使用范型的示例代码并编译运行。请先阅读下面一段使用范型的示例代码并编译运行。然后思考在此例中运用范型与不运用范型的代码不然后思考在此例中运用范型与不运用范型的代码不同之处。同之处。classExampleprivateTt;Example(To)this.t=o;TgetObj()returnt;voidShowObject()Syste

23、m.out.println(对象的类型是:对象的类型是:+t.getClass().getName();思考练习题思考练习题publicclassGenericsExample/*paramargs*/publicstaticvoidmain(Stringargs)/TODOAuto-generatedmethodstubExampleexampleInt=newExample1(100);exampleInt.ShowObject();System.out.println(对象对象是:是:+exampleInt.getObj();ExampleexampleStr=newExample1(H

24、elloWorld!);exampleStr.ShowObject();System.out.println(对象是:对象是:+exampleStr.getObj();思考练习题思考练习题n下面这段代码运用了下面这段代码运用了Java5中的哪些新语言特中的哪些新语言特性?性?importjava.util.*;publicclassAutoBoxingTestpublicstaticvoidmain(Stringargs)ListL=newArrayList(); for(inti=0;i10;+i)L.add(i);for(intelem:L)System.out.println(elem)

25、;思考练习题思考练习题n请分析并编译运行下面示例代码。请分析并编译运行下面示例代码。importjava.util.*;publicclassEnumTestpublicstaticvoidmain(Stringargs)System.out.println(Pleaseenterthemode:);Scannerin=newScanner(System.in);StringmodeName=in.nextLine().toUpperCase();Modem=Enum.valueOf(Mode.class,modeName);System.out.println(getModeName(m);privatestaticStringgetModeName(Modem)returnm.toString();

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号