JDK新特性总结--1(8/9/10)
JDK8新特性(2014.3)
1.速度更快
2.代码更少:Lambda表达式
Lambda表达式本质:java中接口的一个实例(接口实现类的一个具体的对象!)
语法: ->箭头操作符
->左侧:形参列表(参数名称)
->右侧:重写方法的方法体{ },如果有返回值 方法体中写return
注意:使用lambda表达式要求接口必须是函数式接口,即只有一个抽象方法(不包括重写的Object方法)的接口,注解@FunctionalInterface。
系统中的函数式接口:Comparator Runable
系统中内置函数式接口:java.util.function:1.Consumer 消费型接口 void accept(T t)
2.Funvction 函数式接口 R apply(T t)
3.Predicate 断定型接口 boolean test(T t)
4.Supplier 供给型接口 T get()
3.Stream API




排序

终止操作:查找和匹配


归约

收集
4.便于并行
5.最大化减少空指针运行:Optional
6.Nashorn引擎,允许在JVM上运行JS应用
7.接口的变化:加入了默认方法和静态方法
(1)默认方法

(2)疑问:实现类有父类,父类中有同名方法。调用时,走父类的方法还是接口中的默认方法?
答案:走父类的方法,“类优先原则”,一旦父类中的方法和接口中的默认方法冲突的时候,接口中的 默认方法就会忽略!
(3)疑问:一个类实现了两个接口,两个接口都有同名的默认方法,实现类走哪个?
答案:当实现类的接口中有冲突的默认方法,那么实现类必须重写该方法,并且走重写后的逻辑!
(4)静态方法

JDK9新特性(2017.9)
1.目录对比

2.模块化系统
(1)模块与模块之间有相互协议,只有暴露了才可以访问,否则不可以!
(2)需要什么就加载什么!


3.REPL:以交互式的方式,对语句和表达式求值(命令Jshell)


常用命令

4.接口的改变:新增私有方法

5.钻石操作符的升级(泛型<>)

6.try语法的升级
Java7:

java8:不用显示的进行资源的关闭,只要将资源实例化的对象放入try后面的()中,就会自动关闭

java9:可在try后面的()中放入已经实例化的对象
注意:isr默认是被final修饰的,所以在try中是不可以改变的!
多个变量关闭,要用;分割!

7.标识符的改变
标识符的组成:字母、数字、下划线(_)、美元符号($)
java8之前:name_ 是正确的写法;
java9之后:name_ 是错误的写法;
8.API




JDK10新特性
局部变量类型推断
但是没人这样写!
局部变量类型推断发生在编译阶段还是运行阶段?

以上证明局部变量类型推断发生在编译阶段,和运行时无关,对运行时没有产生任何影响!

以下情况不可以用var占位
1.局部变量只声明,没有赋值;

2.Lambda表达式中;

3.方法引用

4.数组的静态初始化

5.方法的返回值类型

6.方法的形式参数(构造器参数也不可以)

7.属性
8.try-catch

浙公网安备 33010602011771号