大家好,欢迎来到IT知识分享网。
北京9月26号Java11如期而至,包含了Java9、Java10全部功能, 虽说短期之内不可能投入生产使用,但是作为一名Javaer,还是很有必要了解Java9-11的一些新特性的。传送门:http://jdk.java.net/11/
1.jshell
Java11安装目录地址栏输入cmd,打开命令行后输入jshell:
就可以像golang和python等语言那样直接运行代码了:
2.一个命令编译运行源代码
要运行一个 Java 源代码必须先编译,再运行,两步执行动作。而在未来的 Java 11 版本中,通过一个 java 命令就直接搞定了,如以下所示。
// 编译 javac Java11.java // 运行 java Java11
3.局部类型推断
var str = "Hello Java11"; System.out.print(str); // Hello Java11
4.String字符串操作方法
lines()方法 一次性将字符串按照换行符分割并返回所有行的流
var str = "Java11"; System.out.println(str.lines());
将流转化为数组,我们只要调用 ReferencePipeline 类的 toArray() 方法即可
System.out.println(str.lines().toArray());
repeat() 方法将字符串重复指定次数,如果传递的是负数,则会抛出异常,如果传递的是 0 ,那么就返回空字符串了
System.out.println("Java11".repeat(3));
isBlank 用于判断字符串是否全部都是空白符,需要注意的是,Java 语言使用 UTF-8 编码,所有 UTF-8 被视为空白符的,在 Java 中也一样
var halfSpace = "\u0020" System.out.println(halfSpace); System.out.println(halfSpace.isBlank()); System.out.println("\u3000"); System.out.println("\u3000".isBlank()); strip() 删除字符串头尾的所有空白符 stripLeading() 删除字符串左边 ( 头部 ) 的所有空白符 stripTrailing() 删除字符串右边 ( 尾部 ) 的所有空白符 System.out.println("-" + " Java11 ".strip() + "-"); System.out.println(" Java11 ".stripLeading() + "-"); System.out.println(" Java11 ".stripTrailing() + "-");
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<String>(); 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 时就截止。
Stream.of(1, 2, 3, 2, 1).dropWhile(n -> n < 3).collect(Collectors.toList()); // [3, 2, 1]
一旦 n < 3 不成立就开始计算
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<String> 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了
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/48453.html