jdk8 笔记记一笔

java7前后加上nio看了将近半个月,能够系统地回味了一下7的特性和风采,这里在7的基础上,在全面展览一下8的过人之处吧。

Java8

语言特性更新

  1. 重复注解 @Repeatable
  2. 类型注解 @NonNull
  3. 通用目标类型推断,推断增强,见java7的两种推断

new api

  1. 集合
  2. 并发
  3. Arrays
  4. Number
  5. Files
  6. Reflection
  7. String

高效编程

  1. 重构代码
  2. 默认方法
  3. Optional
  4. Future

函数式

  1. lambda基本语法
    • (parameters) -> expression
    • (parameters) -> {statments;}
  2. 函数式接口,只定义一个抽象方法的接口
1
2
3
public interface Predicate<T>{
boolean test (T t);
}
  1. 环绕执行:execute around,采用四个步骤实现lambda环绕执行
  2. 使用函数式接口:Predicat/Consumer/Function

    • Predition test
    • Consumer accept
    • Function apply

      PS:泛型使用的都是引用类型,所以原始类型需要经过自动装箱和自动拆箱过程,性能上需要付出代价,推荐使用专门的输入类型参数函数式接口:IntFunction、IntConsumer、DoublePredicate等等

      其他函数式接口:

    • Supplier

    • UnaryOperator
    • BinaryOperator
    • BiPredicate
    • BiConsumer
    • BiFunction
  3. 异常

    任何函数式接口都不允许抛出受检异常

    • 声明异常
    • try catch
  4. 局部变量

    使用自由变量,在外层作用域定义,必须显示声明final

  5. 方法引用 :: Person::getName

    • 静态方法 Integer::parseInt
    • 类的实例方法 String::length
    • 现有对象的实例方法 Person::getName

      构造方法使用: Person::new

  6. 复合

    • 比较器复合 reversed thenComparing
    • 谓词复合 negate and or
    • 函数复合 andThen compose

流 Stream