java11新特性_Java11新特性

北京9月26号Java11如期而至,包含了Java9、Java10全部功能, 虽说短期之内不可能投入生产使用,但是作为一名Javaer,还是很有必要了解Java9-11的一些新特性的。传送门:http://jdk.java.net/11/

1.jshell

Java11安装目录地址栏输入cmd,打开命令行后输入jshell:

24e072b0d6d2

就可以像python交互模式那样直接运行代码了:

24e072b0d6d2

2.一个命令编译运行源代码

要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示。

// 编译

javac Java11.java

// 运行

java Java11

// 一条命令即可

java Java11.java

24e072b0d6d2

3.局部类型推断

var str = "Hello Java11";

System.out.print(str); // Hello Java11

4.String字符串操作方法

lines()方法 一次性将字符串按照换行符分割并返回所有行的流

var str = "Java11";

System.out.println(str.lines()); // java.util.stream.ReferencePipeline$Head@5ec0a365

将流转化为数组,我们只要调用 ReferencePipeline 类的 toArray() 方法即可

System.out.println(str.lines().toArray()); // Object[1] { "Java11" }

repeat() 方法将字符串重复指定次数,如果传递的是负数,则会抛出异常,如果传递的是 0 ,那么就返回空字符串了

System.out.println("Java11".repeat(3)); // Java11Java11Java11

isBlank 用于判断字符串是否全部都是空白符,需要注意的是,Java 语言使用 UTF-8 编码,所有 UTF-8 被视为空白符的,在 Java 中也一样

var halfSpace = "\u0020";

System.out.println(halfSpace);

System.out.println(halfSpace.isBlank()); // true

System.out.println("\u3000");

System.out.println("\u3000".isBlank()); // true

strip() 删除字符串头尾的所有空白符

stripLeading() 删除字符串左边 ( 头部 ) 的所有空白符

stripTrailing() 删除字符串右边 ( 尾部 ) 的所有空白符

System.out.println("-" + " Java11 ".strip() + "-"); // - Java11 -

System.out.println(" Java11 ".stripLeading() + "-"); // Java11 -

System.out.println(" Java11 ".stripTrailing() + "-"); // - Java

5.集合加强

自 Java 9 开始,Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合

var list = List.of("Java11", "Java10", "Java9");

var copy = List.copyOf(list);

System.out.println(list == copy); // true

var list = new ArrayList();

var copy = List.copyOf(list);

System.out.println(list == copy); // false

注意:使用 of 和 copyOf 创建的集合为不可变集合,不能进行添加、删除、替换、排序等操作,不然会报 java.lang.UnsupportedOperationException 异常。

6.Stream 加强

Java 9 开始对 Stream 增加了以下 4 个新方法。

增加单个参数构造方法,可为null

Stream.ofNullable(null).count(); // 0

增加 takeWhile 和 dropWhile 方法

Stream.of(1, 2, 3, 2, 1).takeWhile(n -> n < 3).collect(Collectors.toList()); // [1, 2]

从开始计算,满足n < 3 时就继续(take),否则就截止。

Stream.of(1, 2, 3, 2, 1).dropWhile(n -> n < 3).collect(Collectors.toList()); // [3, 2, 1]

从开始计算,满足n < 3 时就丢弃(drop),一旦 n < 3 不成立就开始计算

Iterate重载

这个 iterate 方法的新重载方法,可以让你提供一个 Predicate (判断条件)来指定什么时候结束迭代。

7.Optional 加强

Optional.of("Java11").orElseThrow(); // java11

Optional.of("Java11").stream().count(); // 1

Optional.ofNullable(null).or(() -> Optional.of("Java11")).get(); // java11

8.InputStream 加强

InputStream 终于有了一个非常有用的方法:transferTo,可以用来将数据直接传输到 OutputStream,这是在处理原始数据流时非常常见的一种用法

var classLoader = ClassLoader.getSystemClassLoader();

var inputStream = classLoader.getResourceAsStream("Java11.txt");

var javastack = File.createTempFile("Java11.1", "txt");

try (var outputStream = new FileOutputStream(javastack)) {

inputStream.transferTo(outputStream);

}

9.HTTP Client API

这是 Java 9 开始引入的一个处理 HTTP 请求的的孵化 HTTP Client API,该 API 支持同步和异步,而在 Java 11 中已经为正式可用状态,你可以在 java.net 包中找到这个 API。

var request = HttpRequest.newBuilder()

.uri(URI.create("https://javastack.cn"))

.GET()

.build();

var client = HttpClient.newHttpClient();

// 同步

HttpResponse response = client.send(request, HttpResponse.BodyHandlers.ofString());

System.out.println(response.body());

// 异步

client.sendAsync(request, HttpResponse.BodyHandlers.ofString())

.thenApply(HttpResponse::body)

.thenAccept(System.out::println);

PS: IntelliJ IDEA 2018.2开始支持Java11了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值