ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# Java 11 的新功能 原文: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](http://jdk.java.net/11) 或 [Oracle JDK](https://www.oracle.com/technetwork/java/javase/downloads/jdk11-downloads-5066655.html) 。 IntelliJ IDEA 2018.2.4 社区版已支持 Java 11。 ```java $ ~/bin/jdk-11/bin/java --version openjdk 11 2018-09-25 OpenJDK 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` ```java package com.zetcode; public class SimpleEx { public static void main(String[] args) { System.out.println("Java 11 example"); } } ``` 这是一个简单的 Java 源文件。 请注意,该文件不必位于`com/zetcode`子目录中。 ```java $ ~/bin/jdk-11/bin/java SimpleEx.java Java 11 example ``` 我们使用`java`工具启动该程序。 ## `HttpClient`标准化 新的`HttpClient`已标准化。 它位于`java.net.http`包中。 `HttpClientEx.java` ```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 请求。 ```java $ ~/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` ```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`方法的用法。 ```java System.out.println(word.repeat(5)); ``` `repeat()`方法返回重复`n`次的字符串。 ```java System.out.println(word2.stripTrailing() + "sky"); System.out.println(word2.stripLeading() + "sky"); System.out.println(word2.strip() + "sky"); ``` `stringTailing()`方法返回删除了所有尾随空格的字符串。 `stringTailing()`方法返回删除了所有前导空格的字符串。 `stringTailing()`方法返回删除了所有前导和尾随空格的字符串。 ```java System.out.println(word3.isBlank()); ``` 如果字符串为空或仅包含空格,则`isBlank()`返回`true`。 ```java words.lines().forEach(System.out::println); ``` `lines()`方法返回从字符串中提取的行流,以行终止符分隔。 ```java $ ~/bin/jdk-11/bin/java StringMethodsEx.java falcon falcon falcon falcon falcon nice blue sky nice bluesky nice blue sky nice bluesky false true falcon eagle sky wood forest ``` 这是输出。 ## `asMatchPredicate`方法 有一个新的`asMatchPredicate`方法可用于正则表达式。 `AsMatchPredicateEx.java` ```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()`方法。 ```java $ ~/bin/jdk-11/bin/java AsMatchPredicateEx.java dog matches Dog matches DOG matches Doggy does not match ``` 这是输出。 ## 文件`readString`和`writeString` `readString()`方法将文件中的所有内容读取为字符串,`writeString()`方法将`CharSequence`写入文件。 `WriteStringEx.java` ```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` ```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`文件的内容并将其写入控制台。 ```java $ ~/bin/jdk-11/bin/java ReadStringEx.java forest wood sky rock ``` 这是输出。 在本教程中,我们研究了 Java 11 的新编程功能。 您可能也对以下相关教程感兴趣: [Java 教程](/lang/java/), [Java 流过滤器教程](http://zetcode.com/java/streamfilter/)。