Java核心逻辑第12章JDK新特性课件

PPT
  • 阅读 32 次
  • 下载 0 次
  • 页数 41 页
  • 大小 539.688 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
Java核心逻辑第12章JDK新特性课件
可在后台配置第一页与第二页中间广告代码
Java核心逻辑第12章JDK新特性课件
可在后台配置第二页与第三页中间广告代码
Java核心逻辑第12章JDK新特性课件
可在后台配置第三页与第四页中间广告代码
Java核心逻辑第12章JDK新特性课件
Java核心逻辑第12章JDK新特性课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 41
  • 收藏
  • 违规举报
  • © 版权认领
下载文档25.00 元 加入VIP免费下载
文本内容

【文档说明】Java核心逻辑第12章JDK新特性课件.ppt,共(41)页,539.688 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-45161.html

以下为本文档部分文字说明:

<InsertPictureHere>第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.*;publicclassTestStatic{publicstaticvoidmain(Strin

gargs[]){System.out.println(PI);System.out.println(abs(-1));out.println(PI);}}可变长参数⚫可以使方法的参数个数可变publicsta

ticvoidprint(Strings){System.out.println(s);}publicstaticvoidmain(Stringargs[]){print();print("tom");print("tom"

,"cat");}publicstaticvoidprint(String...s){for(Stringstring:s){System.out.println(string);}}可变长参数⚫可变长参数其本质实际上就是数组,但比定义数组更加灵活publicstaticv

oidprint1(String[]s){}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关键字enum

Season{SPRING,SUMMER,AUTUMN,WINTER}publicclassTestEnum{publicstaticvoidmain(Stringargs[]){Seasonseason=Season.SPRING

;}}枚举类型⚫在没有枚举类型前,可以通过如下代码模拟枚举类型publicclassTestSeason{publicstaticvoidmain(String[]args){Seasonseason=Season.SPRING;}}

classSeason{publicstaticfinalSeasonSPRING=newSeason();publicstaticfinalSeasonSUMMER=newSeason();publicsta

ticfinalSeasonAUTUMN=newSeason();publicstaticfinalSeasonWINTER=newSeason();privateSeason(){}}枚举特点⚫枚举类型的父类java.lang.Enum▪name()▪ordi

nal()publicclassTestEnum1{publicstaticvoidmain(Stringargs[]){Seasons=Season.SPRING;System.out.println(s.name(

));//SPRINGSystem.out.println(s.ordinal());//0}}enumSeason{SPRING,SUMMER,AUTUMN,WINTER}枚举特点⚫枚举类型的父类java.lang.Enum▪static<TextendsEnum<T>>TvalueOf(Cla

ss<T>enumType,Stringname)▪极重要的一个静态方法,valueOf,可以用字符串来找到对应枚举对象。publicclassTestEnum2{publicstaticvoidmain(Stringargs[]){Seasonseas

on=Enum.valueOf(Season.class,"SPRING");System.out.println(season.name());}}枚举特点▪values()publicclassTestEnum3{publicstaticvoidmain(Stri

ngargs[]){Season[]seasons=Season.values();for(Seasonseason:seasons){System.out.println("nameis"+season.name()+",ordinal"+season.

ordinal());}}}枚举特点⚫枚举类型可以定义属性,并提供相应的方法enumSeason{SPRING,SUMMER,AUTUMN,WINTER;privateStringname;publicStringgetName(){r

eturnname;}publicvoidsetName(Stringname){this.name=name;}}枚举特点publicclassTestEnum{publicstaticvoidmain(Stringargs[]){Seasons=Season.SPRING;

s.setName("tomcat");System.out.println(s.getName());}}枚举特点⚫枚举类型有构造方法但只能是私有的⚫枚举类型可以显示提供构造方法enumSeason{SPRING,SUMMER,AUTUMN,WINTER}枚举特点enum

Season{SPRING("春天"),SUMMER("夏天"),AUTUMN("秋天"),WINTER("冬天");privateStringname;Season(Stringname){this.name=name;}publicStringgetName(){re

turnname;}publicvoidsetName(Stringname){this.name=name;}}枚举特点⚫枚举不能够继承⚫枚举类型默认是final修饰符修饰,也是不能被别的类继承⚫枚举可以提供抽象方法⚫枚举支持switchcase语句(java7

中字符串也支持)⚫枚举是绝对的单例,绝不会出现多个实例,即使反序列化都无法创建多个实例,用枚举来做单例非常简单直接且好用。枚举特点enumOperator{ADD{publicdoublecalculate(doublea,doubleb){returna+b;}},SUBSTRACT{p

ublicdoublecalculate(doublea,doubleb){returna-b;}},MULTIPLY{publicdoublecalculate(doublea,doubleb){returna*b;}},DIVIED{//省略代码};publicabstrac

tdoublecalculate(doublea,doubleb);}枚举特点publicclassTestEnum{publicstaticvoidmain(Stringargs[]){Operatoro=Operator.ADD;System.out.println(o.calculate(1

,2));}}注解(Annotation)⚫注解的概念▪给程序员看的是注释(单行注释、多行注释、doc注释)⚫@注解名⚫JDK中提供的注解▪@Override▪@Deprecated▪@SupperessWarnings注解⚫覆盖toString()方法pu

blicclassWorker{privateStringname;publicvoidm1(){}publicStringtoString(){returnname;}}注解⚫使用注解后,编译器可以检查覆盖方法是否正确public

classWorker{privateStringname;publicvoidm1(){}@OverridepublicStringtoStirng(){returnname;}}注解⚫注解的分类▪标记注解▪单值注解▪多值/普通注解⚫注解

的父类java.lang.annotation.Annotation⚫自定义注解▪public@interface注解名✓public@interfaceTest注解⚫元注解▪@Target✓限定注解的使用目标✓enumElement

Type•TYPE,FIELD,METHOD,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE,ANNOTATION_TYPE,PACKAGE注解⚫元注解▪@Retention✓指明注解信息的保存时间✓enumRetentionPo

licy•SOURCE:注解信息只保存在源程序中,在类文件中不保存•CLASS(Default):注解信息保存在类文件中,程序运行时不能通过反射找到•RUNTIME:注解保存在类文件中,程序运行时通过反射A

PI可以找到注解⚫完整的注解定义@Target(value={ElementType.TYPE})@Retention(value=RetentionPolicy.RUNTIME)@interfaceFirst{}@FirstpublicclassTestAnnota

tion{privateStringname;publicvoidm1(){}}注解⚫注解属性@Target(value={ElementType.TYPE})@Retention(value=RetentionPolicy.RUNTIME)@interfaceFirst{Stringv

alue();}@First("test")publicclassTestAnnotation{privateStringname;publicvoidm1(){}}注解⚫注解属性的类型共有24种▪基本类型,String,Class,enums,annotations,以及它们的数

组注解案例⚫通过注解设计一个自动测试的工具publicclassTestMethod{@Test(parameter="corejava")publicvoidm1(Strings1){System.out.println("m

ethodm1"+s1);}publicvoidm2(Strings2){System.out.println("methodm2"+s2);}}注解案例⚫Test注解的设计@Target({ElementType.ME

THOD})@Retention(RetentionPolicy.RUNTIME)public@interfaceTest{Stringparameter();}注解案例⚫自动测试工具类的设计▪如何得知这个类拥有@Test注解?▪如何获得@Test注解中的参数?▪如何运行

拥有注解的方法?注解案例publicclassTestAnnotation{publicstaticvoidmain(Stringargs[])throwsException{//获得反射需要的类对象Classc=TestMet

hod.class;TestMethodt=(TestMethod)c.newInstance();//获得所有的方法Method[]m=c.getDeclaredMethods();for(Meth

odmm: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引擎⚫引擎在scripting.java.net中⚫示例://创建脚本引擎管理器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_3456

L;▪longsocialSecurityNumber=999_99_9999L;▪floatpi=3.14_15F;▪longhexBytes=0xFF_EC_DE_5E;▪longhexWords=0xCAFE_BABE;

▪longmaxLong=0x7fff_ffff_ffff_ffffL;▪bytenybbles=0b0010_0101;▪longbytes=0b11010010_01101001_10010100_1001001

0;概述⚫在本章讨论了:▪静态导入▪可变长参数▪格式化输入输出▪枚举▪注解▪JDK6/JDK7新特性

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?