Java核心逻辑第12章JDK新特性.ppt
《Java核心逻辑第12章JDK新特性.ppt》由会员分享,可在线阅读,更多相关《Java核心逻辑第12章JDK新特性.ppt(41页珍藏版)》请在装配图网上搜索。
第12章JDK新特性,回顾,class对象获取类对象的方式反射包(java.lang.reflect)反射的作用,本章目标,静态导入可变长参数格式化输入输出枚举注解JDK6/JDK7新特性,本章结构,JDK新特性,JDK6新特性,JDK7新特性,二进制字面值,脚本支持,JDK5新特性,访问javac的api,可变长参数,格式化输入/输出,枚举,注解,静态导入,静态导入,通过静态导入可以在使用一个类型静态成员的时候,不用书写类名,直接使用静态成员即可以前统一声明常量时,很多人选择在一个接口中声明许多静态常量,接口的用途是约定实现类有什么功能,用来声明常量显然不合理,现在可以统一在一个类中声明静态常量,并且在需要的地方使用静态导入注意:静态导入会降低程序的可读性,不要过多使用!,System.out.println(Math.PI);System.out.println(Math.abs(-1);,静态导入,importstaticjava.lang.Math.*;importstaticjava.lang.System.*;publicclassTestStaticpublicstaticvoidmain(Stringargs)System.out.println(PI);System.out.println(abs(-1);out.println(PI);,可变长参数,可以使方法的参数个数可变,publicstaticvoidprint(Strings)System.out.println(s);publicstaticvoidmain(Stringargs)print();print(tom);print(tom,cat);publicstaticvoidprint(String.s)for(Stringstring:s)System.out.println(string);,可变长参数,可变长参数其本质实际上就是数组,但比定义数组更加灵活,publicstaticvoidprint1(Strings)publicstaticvoidprint(String.s)for(Stringss:s)System.out.println(ss);,可变长参数,可以把main函数改写成可变长参数一个方法中最多有一个可变长参数可变长参数必须作为方法的最后一个参数,publicstaticvoidmain(String.args)print();print(tom);print(tom,cat);,格式化的输入输出,JDK5.0提供了新的输入输出语句格式化输出语句System.out.printf()String的静态方法:staticStringformat(Stringformat,Object.args)可以用来生成一个字符串,这个方法的用法和printf一模一样,printf显然在程序中毫无用途,String.format方法才是非常实用的,尤其在拼装字符串时,Stringname=张三;intage=20;System.out.printf(有个学生叫%s,他的年龄是%d。n,name,age);/创建格式化字符串Stringmsg=String.format(有个学生叫%s,他的年龄是%d。,name,age);System.out.println(msg);,格式化的输入输出,提供了更为简单的从命令行获取输入的工具类java.util.Scanner不要关闭Scanner,如关闭了,则System.in也关闭了当调用nextInt()等方法时如果抛出异常(InputMismatchException),则这个Scanner对象不可以再继续使用,必须重新创建一个。,Scannerinput=newScanner(System.in);inti=input.nextInt();,枚举类型,一个类所创建的对象个数是固定的枚举本质上还是类enum关键字,enumSeasonSPRING,SUMMER,AUTUMN,WINTER,publicclassTestEnumpublicstaticvoidmain(Stringargs)Seasonseason=Season.SPRING;,枚举类型,在没有枚举类型前,可以通过如下代码模拟枚举类型,publicclassTestSeasonpublicstaticvoidmain(Stringargs)Seasonseason=Season.SPRING;classSeasonpublicstaticfinalSeasonSPRING=newSeason();publicstaticfinalSeasonSUMMER=newSeason();publicstaticfinalSeasonAUTUMN=newSeason();publicstaticfinalSeasonWINTER=newSeason();privateSeason(),枚举特点,枚举类型的父类java.lang.Enumname()ordinal(),publicclassTestEnum1publicstaticvoidmain(Stringargs)Seasons=Season.SPRING;System.out.println(s.name();/SPRINGSystem.out.println(s.ordinal();/0enumSeasonSPRING,SUMMER,AUTUMN,WINTER,枚举特点,枚举类型的父类java.lang.EnumstaticTvalueOf(ClassenumType,Stringname)极重要的一个静态方法,valueOf,可以用字符串来找到对应枚举对象。,publicclassTestEnum2publicstaticvoidmain(Stringargs)Seasonseason=Enum.valueOf(Season.class,SPRING);System.out.println(season.name();,枚举特点,values(),publicclassTestEnum3publicstaticvoidmain(Stringargs)Seasonseasons=Season.values();for(Seasonseason:seasons)System.out.println(nameis+season.name()+,ordinal+season.ordinal();,枚举特点,枚举类型可以定义属性,并提供相应的方法,enumSeasonSPRING,SUMMER,AUTUMN,WINTER;privateStringname;publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;,枚举特点,publicclassTestEnumpublicstaticvoidmain(Stringargs)Seasons=Season.SPRING;s.setName(tomcat);System.out.println(s.getName();,枚举特点,枚举类型有构造方法但只能是私有的枚举类型可以显示提供构造方法,enumSeasonSPRING,SUMMER,AUTUMN,WINTER,枚举特点,enumSeasonSPRING(春天),SUMMER(夏天),AUTUMN(秋天),WINTER(冬天);privateStringname;Season(Stringname)this.name=name;publicStringgetName()returnname;publicvoidsetName(Stringname)this.name=name;,枚举特点,枚举不能够继承枚举类型默认是final修饰符修饰,也是不能被别的类继承枚举可以提供抽象方法枚举支持switchcase语句(java7中字符串也支持)枚举是绝对的单例,绝不会出现多个实例,即使反序列化都无法创建多个实例,用枚举来做单例非常简单直接且好用。,枚举特点,enumOperatorADDpublicdoublecalculate(doublea,doubleb)returna+b;,SUBSTRACTpublicdoublecalculate(doublea,doubleb)returna-b;,MULTIPLYpublicdoublecalculate(doublea,doubleb)returna*b;,DIVIED/省略代码;publicabstractdoublecalculate(doublea,doubleb);,枚举特点,publicclassTestEnumpublicstaticvoidmain(Stringargs)Operatoro=Operator.ADD;System.out.println(o.calculate(1,2);,注解(Annotation),注解的概念给程序员看的是注释(单行注释、多行注释、doc注释)注解名JDK中提供的注解OverrideDeprecatedSupperessWarnings,注解,覆盖toString()方法,publicclassWorkerprivateStringname;publicvoidm1()publicStringtoString()returnname;,注解,使用注解后,编译器可以检查覆盖方法是否正确,publicclassWorkerprivateStringname;publicvoidm1()OverridepublicStringtoStirng()returnname;,注解,注解的分类标记注解单值注解多值/普通注解注解的父类java.lang.annotation.Annotation自定义注解publicinterface注解名publicinterfaceTest,注解,元注解Target限定注解的使用目标enumElementTypeTYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE,注解,元注解Retention指明注解信息的保存时间enumRetentionPolicySOURCE:注解信息只保存在源程序中,在类文件中不保存CLASS(Default):注解信息保存在类文件中,程序运行时不能通过反射找到RUNTIME:注解保存在类文件中,程序运行时通过反射API可以找到,注解,完整的注解定义,Target(value=ElementType.TYPE)Retention(value=RetentionPolicy.RUNTIME)interfaceFirstFirstpublicclassTestAnnotationprivateStringname;publicvoidm1(),注解,注解属性,Target(value=ElementType.TYPE)Retention(value=RetentionPolicy.RUNTIME)interfaceFirstStringvalue();First(test)publicclassTestAnnotationprivateStringname;publicvoidm1(),注解,注解属性的类型共有24种基本类型,String,Class,enums,annotations,以及它们的数组,注解案例,通过注解设计一个自动测试的工具,publicclassTestMethodTest(parameter=corejava)publicvoidm1(Strings1)System.out.println(methodm1+s1);publicvoidm2(Strings2)System.out.println(methodm2+s2);,注解案例,Test注解的设计,Target(ElementType.METHOD)Retention(RetentionPolicy.RUNTIME)publicinterfaceTestStringparameter();,注解案例,自动测试工具类的设计如何得知这个类拥有Test注解?如何获得Test注解中的参数?如何运行拥有注解的方法?,注解案例,publicclassTestAnnotationpublicstaticvoidmain(Stringargs)throwsException/获得反射需要的类对象Classc=TestMethod.class;TestMethodt=(TestMethod)c.newInstance();/获得所有的方法Methodm=c.getDeclaredMethods();for(Methodmm:m)/判断哪个方法拥有Test标注if(mm.isAnnotationPresent(Test.class)/获得Test标注Testtt=mm.getAnnotation(Test.class);/获得Parameter属性的值Stringname=tt.parameter();mm.invoke(t,name);,JavaSE6:脚本支持,为开发者提供了在同一应用中使用不同语言的能力使用Java库扩展脚本语言Sun的SDK中提供了JavaScript引擎MozilaRhino引擎引擎在中示例:,/创建脚本引擎管理器ScriptEngineManagerengineManager=newScriptEngineManager();/获得脚本引擎ScriptEngineengine=engineManager.getEngineByName(js);/执行脚本try/注意,这是JavaScript的语法,字符串可以用单引号包围/数值型的字符串可以当作数值来运算engine.eval(println(123*2);catch(ScriptExceptione)e.printStackTrace();,JavaSE6:访问编译器,提供对编译器javac的访问,用于动态生成代码Java工具或框架的开发者经常使用该功能,JavaSE7:更好的整型字面值,二进制字面值intmask=0b101001;longl=0b1101001010011L;数值的千分符表示longcreditCardNumber=1234_5678_9012_3456L;longsocialSecurityNumber=999_99_9999L;floatpi=3.14_15F;longhexBytes=0 xFF_EC_DE_5E;longhexWords=0 xCAFE_BABE;longmaxLong=0 x7fff_ffff_ffff_ffffL;bytenybbles=0b0010_0101;longbytes=0b11010010_01101001_10010100_10010010;,概述,在本章讨论了:静态导入可变长参数格式化输入输出枚举注解JDK6/JDK7新特性,- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 核心 逻辑 12 JDK 特性
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文