JDK8新特性
- Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。
- 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
- 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
- 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
- Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
- Date Time API − 加强对日期与时间的处理。
- Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
- Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn
javascript引擎,它允许我们在JVM上运行特定的javascript应用。
更多的新特性可以参阅官网:What’s New in JDK 8
方法引用
方法引用通过方法的名字来指向一个方法。
方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
方法引用使用一对冒号 :: 。
构造器引用
构造器引用:它的语法是Class::new,或者更一般的Class< T >::new实例如下:
@Test
public void test7() {
//无参构造
Supplier<User> userSupplier= User :: new;
System.out.println(userSupplier.get().setName("mary").setAge(13));
//一个参数的构造
Function<String,User> userFunction = User ::new;
User jason = userFunction.apply("jason");
System.out.println(jason);
//两个参数的构造
BiFunction<String, Integer,User> user = User :: new;
User jack = user.apply("jack", 19);
System.out.println(jack);
//User{name='mary', age=13}
//User{name='jason', age=null}
//User{name='jack', age=19}
}
类调用静态方法
它的语法是Class::static_method,实例如下:
User.class
public static void eat(String s){
System.out.println("我可以吃" + s);
}
Consumer<String> consumer = User :: eat;
consumer.accept("西瓜");
//我可以吃西瓜
类调用非静态方法
List<Integer> list = Arrays.asList(3, 4, 2, 6, 2, 3);
list.forEach(System.out::println);
/*
3
4
2
6
2
3
*/
对象调用非静态方法
User tom = new User("tom", 12);
Supplier<String> supplier = tom::getName;
System.out.println(supplier.get());
//tom