1.5

1.包装器(自动装箱拆箱)

包装器有:Double,Float,Long,Integer,Short,Character和Boolean

自动装箱,只需将该值赋给一个类型包装器引用,java会自动创建一个对象。

自动拆箱,只需将该对象值赋给一个基本类型即可

2.可变长参数

JDK新特性(1.5,1.7,1.8)_Lambda 表达式

3.泛型

注:Basic<T>和Basic<E>中T和E只是标志位(语义化为:Type和Element简写或者其他简写),本质上是可以使用A,B任意替换

注:​​泛型中? super T和? extends T的区别​​

<? super T>表示包括T在内的任何T的父类,<? extends T>表示包括T在内的任何T的子类(具体请自行查阅)

1)泛型使用(创建List中仅可以存放指定string类型数据)

JDK新特性(1.5,1.7,1.8)_JDK新特性_02

2)?通配符

JDK新特性(1.5,1.7,1.8)_java_03

下面这句代码,我赶脚很有深度和使用意义(泛型:仅仅是类型的限制,不包含任何实际意义)

JDK新特性(1.5,1.7,1.8)_JDK新特性_04

4.foreach(增强for)

JDK新特性(1.5,1.7,1.8)_1.8_05

5.静态引入(本类中调用其他类中中所有静态成员->[格式:import static 包名.类名.静态的成员;])

JDK新特性(1.5,1.7,1.8)_java_06

1.7

1.switch可以使用String

JDK新特性(1.5,1.7,1.8)_java_07

2.类型自动推断

​// Pre-JDK 7​

​List<String> lst1 = new​​​ ​​ArrayList<String>();​

​// JDK 7​

​List<String> lst2 = ​​​​new​​​ ​​ArrayList<>();​

​3.​​对Java集合(Collections)的增强支持

关于jdk1.7中集合新特性无法使用的问题->此特性纯属无稽之谈(经测试,无效) 
4.一个catch可以写多个异常类型
try {  ......  } catch(ClassNotFoundException | SQLException ex) {

     ex.printStackTrace();

}

1.8

1.Lambda 表达式

格式:左侧参数 -> 右侧函数体

语法格式一:无参数,无返回值
()->System.out.println(“Hello Lambda!”);

语法格式二:lambda表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过类型推断

(x , y) -> Integer.compare(x, y);

语法格式三:若只有一个参数,()可以省略不写

x->System.out.println(“Hello Lambda!”);

JDK新特性(1.5,1.7,1.8)_Lambda 表达式_08

2.函数式接口(方法形参可以是接口)

类似于如下结构

1)接口@FunctionalInterface注解修饰

2)有且仅有一个抽象方法(Object的public方法除外),但是可以有多个非抽象方法的接口,如果需要多个抽象方法(default关键字)

JDK新特性(1.5,1.7,1.8)_JDK新特性_09

为什么这么麻烦来调整interface接口呢?肯定有很大的好处的

函数式接口的一大特性:可以被lambda表达式和函数引用表达式代替。也就是说声明这样的接口,是可以灵活的以方法来传参

Java8 内置的四大核心函数式接口

1)断言式接口predicate(过滤数组)

JDK新特性(1.5,1.7,1.8)_Lambda 表达式_10

2)Function:函数式接口(处理字符串)

JDK新特性(1.5,1.7,1.8)_JDK新特性_11

3)Supplier:供给型接口

JDK新特性(1.5,1.7,1.8)_Lambda 表达式_12

4)Consumer:消费型接口

JDK新特性(1.5,1.7,1.8)_java_13

3.方法引用 [::] (个人感觉::就相当于方法调用的.)

如下图所示 

JDK新特性(1.5,1.7,1.8)_1.8_14

()->{System.out::println("方法调用")};    //本句只是提供演示意思并不可以单独运行

4.STREAM

参考:​​http://www.runoob.com/java/java8-streams.html​