您好,欢迎访问三七文档
—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnJava7新特性讲师:WillEmail:iwiller@sina.cn—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnJava7JavaDevelopmentKit7(Java7开发者工具包)于2011年7月28日推出。—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnJava7新特性预览Java编程语言特性JDBC4.1JavaI/O国际化Java2D安全性并发Java虚拟机java.lang包XML网络集合RIA/发布Swing—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnJava7Java编程语言特性•二进制数字表达式•使用下划线对数值进行分隔表达•switch语句支持String变量•增强的基本类型包装类•Objects类•泛型实例创建的类型推断•使用可变参数时,提升编译器的警告和错误信息@SafeVarargs•同时捕获多个异常处理•增强throw语句•try-with-resources语句—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn二进制数字表达式整数进制(计算机存储数据的方式)•二进制:01•八进制:0~70开头例:024(不太常用)•十六进制:0~9A~F0x开头例:0x2a4e•十进制:0~9Java7后,二进制表达,可使用0b/0B开头•0B00000000_000000000_00000000_00000110—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn二进制数字表达式如果只是想将某个整数值以8,10,16这三种进位输出到PrintStream(例如System.out)里的话,可以用其中的printf方法加上格式化字串语法FormatterStringSyntax来转换:•System.out.printf(十进制:%d,八进制:%o,十六进制:%x,a,a,a);•注意:没有支持二进制的格式化打印若我们要把某个整数数值转换成不同进制的其他数值,可以利用数值包装类来处理对应类型的转型操作。•inta=10;•Stringbin=Integer.toBinaryString(a);//2进位•Stringoctal=Integer.toOctalString(a);//8进位•Stringhex=Integer.toHexString(a);//16进位—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn二进制数字表达式inta=99;//10进位intbin1=0b1100011;intocatal1=0143;//8进位inthex1=0x63;////16进位Stringbin=Integer.toBinaryString(a);//2进位1100011Stringoctal=Integer.toOctalString(a);//8进位143Stringhex=Integer.toHexString(a);//16进位63System.out.println(二进制=+bin);System.out.println(八进制=+octal);System.out.println(十六进制=+hex);System.out.printf(十进制:%d,八进制:%o,十六进制:%x,a,a,a);—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn使用下划线对数值分隔表达也称为数值的底线格式;简单地说,就是一个数值(整数或浮点数)的表示方式,除了数字、类型符号、正负符号、小数点外,还能加上底线来增加数值的可读性。当我们表示一个二进制的数值。•intbin1=0b000000000000000001100011;//99的二进制,很容易多些或少些一个0或1,为此Java7后开始支持新的书写格式。•intbin3=0b00000000_00000000_01100011;//清晰多了•floatpi=3.14_159_26f;注意:•底线不能加在数值的开头,例如_12_34,这样是错误的。•底线不能加上数值的结尾,例如12_34_,这样是错误的。•底线不能加在2进位和16进位的进位表示字元之后,例如0x_1234,0b_1100,这样是错误的。—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnswitch语句支持String变量复习switch语法支持的格式。每次匹配的是String对象的hashCode()—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn增强的基本数据类型包装类增强的基本类型包装类•publicstaticintcompare(Tx,Ty)(Double,Float1.4就有了)•Boolean比较的时候,truefalse•Character类publicstaticStringgetName(intcodePoint)—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnObjects类publicfinalclassObjectsextendsObjectJava7新添加的类,对象工具类。能在一定程度避免出现空指向异常。publicstaticStringtoString(Objecto);publicstaticStringtoString(Objecto,StringnullDefault);publicstaticTTrequireNonNull(Tobj,Stringmessage);publicstaticTTrequireNonNull(Tobj);publicstaticbooleanequals(Objecta,Objectb);publicstaticbooleandeepEquals(Objecta,Objectb);//等价于Arrays.deepEquals(Object[]a)publicstaticinthashCode(Objecto);publicstaticinthash(Object...values);等价于Arrays.hashCode(Object[])publicstaticTintcompare(Ta,Tb,Comparator?superTc);区别于先前的对象比较—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn泛型实例创建的类型推断傻傻的Java,使我们不能偷懒。Java7后:MapString,Objectmap=newHashMapString,Object();ListMapString,Objectlist=newArrayListMapString,Object();MapString,Objectmap2=newHashMap();ListMapString,Objectlist2=newArrayList();—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn堆污染和@safeVarargsListlist=newArrayListInteger();list.add(20);//添加元素引发unchecked警告ListStringls=list;//引发未经检查的转换警告,编译,运行没有问题System.out.println(ls.get(0));//运行时异常Java把这种错误的原因称为堆污染,当把一个不带泛型的对象赋给一个带泛型的变量时,往往会发生这种堆污染;—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnHeapPollutionjava5加入泛型后一直存在潜在的使用问题----.堆污染。当在可变长参数方法中形参是泛型时往往会发生堆污染。classUtil{publicstaticintsum(ListIntegerls){intsum=0;for(Integeri:ls)sum+=i;returnsum;}}publicclassHeapPollutionDemo{publicstaticvoidmain(String[]args){String[]sArr={1,2,3};Listnumbers=Arrays.asList(sArr);System.out.printf(Sum=%d%n,Util.sum(numbers));}}—高级软件人才实作培训专家成都传智播客教育cd.itcast.cnJava7开始的4个基本Annotation@Override•限定覆写父类方法的@Deprecated•标记已过时的@SuppressWarnings•抑制编译器警告的@SafeVarargs:jdk1.7开始出现•修饰可引发堆污染警告的—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn@SafeVarargs我们不想在编译时看到警告信息的话,在JavaSE7之前,我们可以用一个Annotation-@SuppressWarings(unchecked)来抑制这个警告。在JavaSE7开始多了一个新的Annotation专门设计给varrags用的,就是@SafeVarargs。效果跟@SuppressWarings(unchecked)一样;这样编译器就会认为你已经知道HeapPollution的风险,而忽略对这个方法提出警告。不过,这只是把警告给抑制下来,实际上HeapPollution的问题并没有消失,所以在调用这种的方法時,还是是得特別地注意。—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn例子classUtil{@SafeVarargspublicstaticTintsum(T...vals){intsum=0;for(Tt:vals){sum+=((Number)t).intValue();}returnsum;}}publicclassVarargsDemo{publicstaticvoidmain(String[]args){ListDoublenumbers=newArrayList();args=newString[]{1,2};for(Stringstr:args)numbers.add(Double.parseDouble(str));System.out.printf(Sum=%d%n,Util.sum(numbers));}}—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn异常之同时捕获多个异常Java7之前:try{Integera=Integer.parseInt(1);Integerb=Integer.parseInt(0);Integerc=a/b;System.out.println(c);}catch(rithmeticExceptione){e.printStackTrace();}catch(NumberFormatExceptionAe){e.printStackTrace();}Java7开始:try{Integera=Integer.parseInt(1);Integerb=Integer.parseInt(0);Integerc=a/b;System.out.println(c);}catch(NumberFormatException|ArithmeticExceptione){e.printStackTrace();}—高级软件人才实作培训专家成都传智播客教育cd.itcast.cn异常之同时捕获多个异常try{Integera=Integer.parseInt(1);Integerb=Integer.parseInt(0);Integerc=a/b;System.out.println(c);}catch(NumberForm
本文标题:25_Java7
链接地址:https://www.777doc.com/doc-3000387 .html