JDK1.8版本新特性详细介绍
程序员文章站
2022-06-06 12:20:44
...
JDK版本学习
jdk1.7新特性
- 支持二进制变量表示,所有整数(Long,int,short,byte)都可以以二进制变量表示 如
int i = 0b1001
- 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新特性
- 接口新增静态方法和默认方法可拥有方法体 static方法(不可被子接口、实现类实现) defalut方法(可以被子接口、实现类实现)
- 函数lambda表达式 () -> {} 旨在要做什么,强调结果 适用于函数式接口,即接口内只存在一个抽象方法。
- 范围:可访问外部的final变量,对象字段和静态变量(表达式外定义内赋值) 不能访问接口中的静态方法(不可被实现的)。
- 开启功能性接口(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();
- 新的Date API 与之前的是兼容的。
- 新增 :: 关键字,可以用来指定方法或是构造函数 使用如 Date:: new 新建一个Date时间类对象
- Annotations是可重复 可重复注解