原文:http://zetcode.com/articles/java11/
在本文中,我们介绍了 Java 11 的一些新功能。Java 11 于 25.9 发布。 2018。在本文中,我们将重点介绍 Java 11 的新编程功能。
Java 11 组织变更
Java 11 做了大量整理工作。 Java EE,CORBA 和 Java FX 已从 JDK 中删除。 它们可以从 Maven 仓库中获得。 JavaScript Nashorn 引擎已被弃用。 Java 小程序已被永久删除。
下载 Java 11
我们下载 OpenJDK 或 Oracle JDK 。
IntelliJ IDEA 2018.2.4 社区版已支持 Java 11。
$ ~/bin/jdk-11/bin/java --versionopenjdk 11 2018-09-25OpenJDK Runtime Environment 18.9 (build 11+28)OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
在我们的示例中,我们使用了 OpenJDK。
Java 11-启动单文件源文件
无需使用javac即可在不进行事先编译的情况下启动单文件 Java 源文件。 这有助于新的程序员学习 Java 的基础知识,并促进创建更简单的程序。
我们不会用字节码文件来弄乱我们的空间,也不需要担心 Java 打包规则。
SimpleEx.java
package com.zetcode;public class SimpleEx {public static void main(String[] args) {System.out.println("Java 11 example");}}
这是一个简单的 Java 源文件。 请注意,该文件不必位于com/zetcode子目录中。
$ ~/bin/jdk-11/bin/java SimpleEx.javaJava 11 example
我们使用java工具启动该程序。
HttpClient标准化
新的HttpClient已标准化。 它位于java.net.http包中。
HttpClientEx.java
package com.zetcode;import java.net.http.HttpClient;import java.net.http.HttpRequest;import java.net.http.HttpResponse;import java.net.URI;public class HttpClientEx {public static void main(String[] args) {var client = HttpClient.newHttpClient();var request = HttpRequest.newBuilder().uri(URI.create("http://webcode.me")).build();client.sendAsync(request, HttpResponse.BodyHandlers.ofString()).thenApply(HttpResponse::body).thenAccept(System.out::println).join();}}
在示例中,我们创建一个新的 http 客户端。 然后,我们向 webcode.me 网站生成一个异步 HTTP 请求。
$ ~/bin/jdk-11/bin/java HttpClientEx.java<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>My html page</title></head><body><p>Today is a beautiful day. We go swimming and fishing.</p><p>Hello there. How are you?</p></body></html>
服务器以该 HTTP 文件响应。
Java 11 新的字符串方法
Java 11 中有新的String方法。
StringMethodsEx.java
package com.zetcode;public class StringMethodsEx {public static void main(String[] args) {var word = "falcon ";System.out.println(word.repeat(5));var word2 = "\tnice blue\t";System.out.println(word2 + "sky");System.out.println(word2.stripTrailing() + "sky");System.out.println(word2.stripLeading() + "sky");System.out.println(word2.strip() + "sky");var word3 = " ";System.out.println(word3.isEmpty());System.out.println(word3.isBlank());var words = "falcon\neagle\nsky\nwood\nforest";words.lines().forEach(System.out::println);}}
在示例中,我们演示了新String方法的用法。
System.out.println(word.repeat(5));
repeat()方法返回重复n次的字符串。
System.out.println(word2.stripTrailing() + "sky");System.out.println(word2.stripLeading() + "sky");System.out.println(word2.strip() + "sky");
stringTailing()方法返回删除了所有尾随空格的字符串。 stringTailing()方法返回删除了所有前导空格的字符串。 stringTailing()方法返回删除了所有前导和尾随空格的字符串。
System.out.println(word3.isBlank());
如果字符串为空或仅包含空格,则isBlank()返回true。
words.lines().forEach(System.out::println);
lines()方法返回从字符串中提取的行流,以行终止符分隔。
$ ~/bin/jdk-11/bin/java StringMethodsEx.javafalcon falcon falcon falcon falconnice blue skynice blueskynice blue skynice blueskyfalsetruefalconeagleskywoodforest
这是输出。
asMatchPredicate方法
有一个新的asMatchPredicate方法可用于正则表达式。
AsMatchPredicateEx.java
package com.zetcode;import java.util.Arrays;import java.util.regex.Matcher;import java.util.regex.Pattern;public class AsMatchPredicateEx {public static void main(String[] args) {var words = Arrays.asList("dog", "Dog", "DOG", "Doggy");var pred = Pattern.compile("dog",Pattern.CASE_INSENSITIVE).asMatchPredicate();words.forEach((word) -> {if (pred.test(word)) {System.out.printf("%s matches%n", word);} else {System.out.printf("%s does not match%n", word);}});}}
asMatchPredicate()方法从编译的模式创建一个新的谓词。 在谓词上,我们称为test()方法。
$ ~/bin/jdk-11/bin/java AsMatchPredicateEx.javadog matchesDog matchesDOG matchesDoggy does not match
这是输出。
文件readString和writeString
readString()方法将文件中的所有内容读取为字符串,writeString()方法将CharSequence写入文件。
WriteStringEx.java
package com.zetcode;import java.nio.file.Path;import java.nio.file.Files;import java.io.IOException;public class WriteStringEx {public static void main(String[] args) throws IOException {var words = "forest\nwood\nsky\nrock";Files.writeString(Path.of("words.txt"), words);}}
在此示例中,我们将四个单词写入words.txt文件。
ReadStringEx.java
package com.zetcode;import java.nio.file.Path;import java.nio.file.Files;import java.io.IOException;public class ReadStringEx {public static void main(String[] args) throws IOException {var fileName = "words.txt";var data = Files.readString(Path.of("words.txt"));System.out.println(data);}}
在此示例中,我们读取words.txt文件的内容并将其写入控制台。
$ ~/bin/jdk-11/bin/java ReadStringEx.javaforestwoodskyrock
这是输出。
在本教程中,我们研究了 Java 11 的新编程功能。
您可能也对以下相关教程感兴趣: Java 教程, Java 流过滤器教程。
