欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK1.8版本新特性详细介绍

程序员文章站 2022-06-06 12:20:44
...

JDK版本学习

jdk1.7新特性

  1. 支持二进制变量表示,所有整数(Long,int,short,byte)都可以以二进制变量表示 如
int i = 0b1001
  1. Switch语句支持String类型,以前只支持 int long char short byte 类型
数据类型 名称 范围
int 整型 2^(-32) ~ 2^(32) -1
long 长整型 2^(-64) ~ 2^(64) -1
short 短整型 2^(-16) ~ 2^(16) -1
byte 字节 2^(-8) ~ 2^(8) -1
char 字符 2^(-16) ~ 2^(16) -1

扩展八种基本数据类型(byte short int long float double boolean char void(第九种))
4. catch捕获异常可以支持多个
5. 泛型实例的创建可以通过类型推断来简化 如 List list = new ArrayList(); 可简化为 List list = new ArrayList<>();

jdk1.8新特性

  1. 接口新增静态方法和默认方法可拥有方法体 static方法(不可被子接口、实现类实现) defalut方法(可以被子接口、实现类实现)
  2. 函数lambda表达式 () -> {} 旨在要做什么,强调结果 适用于函数式接口,即接口内只存在一个抽象方法。
  • 范围:可访问外部的final变量,对象字段和静态变量(表达式外定义内赋值) 不能访问接口中的静态方法(不可被实现的)。
  1. 开启功能性接口(Stream API) 需要深入学习 可适用于集合List、Map等知识 (顺序流(单线程)、并行流(多线程)速度快) 并不会改变原来集合中的元素。
  • 断言接口predicates : 只拥有一个参数的boolean型接口,其拥有多个默认方法来构成复杂的逻辑术语。
          Predicate<String> pred = (s) -> s.length() > 0;
          System.out.print(pred.test("food"));   // true
           System.out.print(pred.negate().test("food"));  //  false
    
  • 功能接口Functions : 接受一个参数并产生一个结果,默认方法可以拼接多个函数
  • 供应接口Suppliers : 对于给定的泛型产生一个实例,不需要参数 作用等同于new
Suppliers<Person> s = Person :: new;
s.get();   //new Peron
  • 消费接口Consumers : 输入参数只有一个
Consumer<Person> getters = (p) -> System.out.println("hello, " + p.firstName);
getters.accept(new Person("Luke","Skywalker"));
  • 比较接口Comparators : 用于两个数作比较
Comparator<Person> comparator  = (p1,p2) -> p1.firstName.compareTo(p2.firstName);
Person p1 = new Person("Jodn","Doe");
Person p2 = new Person("Alice","girl");
comparator.compare(p1,p2);
comparator.reversed().compare(p1,p2);
  • 选项接口Optionals:用来阻止NullPointerException (包含null和non-null的简单容器)
  • 流接口Streams:核心API不容错过,java.util.Stream代表了一串你可以在其上进行多种操作的元素,流操作可以是中断的也可以是连续的,中断流返回操作结果,连续流操作返回流本身。还分为顺序流和并行流。针对集合等操作流 如 List list = new ArrayList<>(); 获取流 list.stream() : 顺序流或是list.parallelSteam():并行流。
list.add("aabb1");
list.add("aabb2");
list.add("cc3");
list.add("dd4");
//Filter过滤 (连续流操作)
   list
    .stream()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);  //中断操作(forEach) :返回结果了不能再其后调用其他流操作。
//Sorted : 流排序
   list
    .stream()
    .sorted()
    .filter((s) -> s.startsWith("a"))
    .forEach(System.out::println);
//Map映射操作
  list
    .stream()
    .map(String::toUpperCase)        
    .sorted((a, b) -> b.compareTo(a))
     .forEach(System.out::println);
// Match 匹配操作:检测是否与流中元素相匹配返回boolean值。
boolean flag =  list
                           .stream()
                            .anyMatch((s) -> s.startsWith("a"));   //true
boolean flag = list
                           .stream()
                           .allMatch((s) -> s.startsWith("a"));   //false

// Count 中断型操作 返回流中元素数量
long number = list
                            .stream()
                            .filter((s) -> s.startsWith("b"))
                            .count();
  1. 新的Date API 与之前的是兼容的。
  2. 新增 :: 关键字,可以用来指定方法或是构造函数 使用如 Date:: new 新建一个Date时间类对象
  3. Annotations是可重复 可重复注解
相关标签: java stream jdk