JDK1.7`` 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头。 所有整数int,short,long,byte都可以用二进制表示:
byte a=(byte) 0b00100001;1.2Switch语句支持String类型。
String a=sc.nextLine(); switch(a) { case "zhangsan": System.out.printf("输入的是张三"); break; case "lisi": System.out.println("输入的是李四"); break; } }1.3Try-with-resource语句 try-with-resources语句是一种声明了一种或多种资源的try语句。资源是指在程序用完了之后必须要关闭的对象。 try-with-resources语句保证了每个声明了的资源在语句结束的时候都会被关闭/任何实现了java.lang.AutoCloseable接口的对象,和实现了java.io.Closeable接口的对象,都可以当资源使用。 1.4Catch多个异常,可以在单个catch块中处理多个异常。如果你想要捕获多个异常并且他们包含相似的代码,使用这一特性就会减少代码重复率。
catch(IOException|SQLException|Exception ex) { logger.error(ex); throw new MyException(ex.getMessage()); }1.5数字类型的下划线表示更友好的表示方式,不过要注意下划线添加一些标准 字面常量数字里加下划线的规则:下划线只能在数字之间,在数字的开始或结束一定不能用下划线。 1.6泛型实例的创建可以通过类型判断来简化,可以去掉后面new部分的泛型类型,只用<>就可以了 1.7在可变参数方法中传递非具体化参数,改进编译警告和错误。 1.8信息更丰富的回溯追踪,就是上面的try语句和里面的语句同时抛出异常,异常栈的信息等等。 JDK1.8 java1.8是1.7的增强版,新增了以下特性 2.1接口的默认和静态方法: Java8允许我们给接口添加一个非抽象的方法的实现,只需要使用default关键字即可,这个特征又叫做扩展方法。
public interface JDK8Interface { //static修饰符定义的静态方法 static void staticMethod() { System.out.println("接口中的静态方法"); } //default修饰符定义的静态方法 default void defaultMethod() { System.out.println("接口中的默认方法"); } }2.2Lambda表达式:(例如:(x,y)->{return x+y;};表达式有三部分组成:参数列表,箭头,以及一个表达式或语句块。)
Collections.sort(names,(String a,String b)->{return b.compareTo(a);});2.3函数式接口,函数式接口是指仅仅只包含一个抽象方法的接口,每一个该类型的lambda表达式都会被匹配到这个抽象方法。jdk1.8提供了一个@Functionnallnterface注解来定义函数式接口,如果我们定义的接口不符合函数式的规范便会报错。 2.4方法与构造函数引用:Java8允许你使用:关键字来传递方法或者构造函数引用,上面的代码展示了如何引用一个静态方法,我们也可以引用一个对象的方法:
converter=something::startsWith; String converted=converter.convert("Java"); System.out.println(converted);2.5Annotation注解:支持多重注解: 很多时候一个注解需要在某一位置多次使用
@YourAnnotation @YourAnnotation public void test() { //TODO }2.6Data Api更新1.8之前JDK自带的日期处理处理类非常不方便,我们处理的时候经常是使用的第三方工具包,比如commons-lang包等。不过1.8出现之后这个改观了很多,比如日期时间的创建,比较,调整,格式化,时间间隔等。这些类都在java.time包下。比原来实用了很多。 2.7流,流是Java API的新成员,它允许我们以声明式方式处理数据集合(通过查询语句来表达,而不是临时编写一个实现)。就现在来说,我们可以把它们看成遍历数据集的高级迭代器。此外,流还可以透明地并行处理,也就是说我们不用写多线程代码了。