0%

java新版本特性

[toc]


java8特性#

1. lambda表达式。把函数作为一个方法的参数#

  • 也叫闭包
  • 相对应的,还多了函数式接口,二者可以配合使用

2. Stream api#

  • 提供一种对Java集合运算和表达的高阶抽象,引入map、reduce等方法。
  • map方法中还支持 类名::方法名的调用方式,来单独调用方法
    把map(a->a.getX())简写成了map(A::getX)

3.新增了接口的默认方法,支持default实现了#

4.新增Optional 类,解决空指针判断问题#

5.新增Base64编码库#


JAVA11新特性#

1. 支持局部变量类型推断#

可以写var这种变量声明了,编译器能自动识别,可加快部分情况下的编程速度。
var a = 1;
var s = “abcd”;

但是会加重编译器负担。

2. 字符串api增强#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    public static void main(String[] args) {

String str1 = "\t \n\r ";
//判断字符串是否是空白字符
System.out.println(str1.isBlank());
System.out.println("*****===========");
str1 = "\t abc \r \n ";
//去除字符串首尾中的空白,包括英文和其它所有语言的空白字符
String strip = str1.strip();
//去除字符串首部的空白,包括汉字
String stripLeading = strip.stripLeading();
//去除字符串尾部的空白,包括汉字
String stripTrailing = strip.stripTrailing();
System.out.println(strip+"<====>"+strip.length());

str1 = "java";
str1.repeat(3);//把str1 重复三次,输出 javajavajava

//去除字符串首尾中的空白,只能去除码值小于32的(如果是中文全角的空白是去除不了的)
String trim = str1.trim();
System.out.println(trim+"<====>"+trim.length());
}

3. stream增强#

  • 支持Stream.ofNullable(null)生成一个值的流
  • 支持while循环,符合一个条件就take结束或者开始计算
1
2
3
4
5
// 从第一个开始计算,当 n < 3 时就截止
Stream.of(1, 2, 3, 2, 1).takeWhile(n -> n < 3) .collect(Collectors.toList()); // [1, 2]

// 一开始不计算,当n<3不成立时开始计算
Stream.of(1, 2, 3, 2, 1).dropWhile(n -> n < 3) .collect(Collectors.toList()); // [3, 2, 1]

4. Optional增强#

支持orElseThrow等语法。

5. 正式引入HTTP Client API#

和Apache 的 HttpClient的区别?
8d27930b8e75caf9a2a4c131ad4d6380131d2630

6.支持jshell,类似py shell#

可以节省验证demo的时间
83c6d5568870f9f8ac73fe489efa93832ab7d598

7.默认使用G1收集器,且jvm和垃圾收集有关的参数设置进行了很多调整#