原文:http://zetcode.com/articles/java11/
在本文中,我们介绍了 Java 11 的一些新功能。Java 11 于 25.9 发布。 2018。在本文中,我们将重点介绍 Java 11 的新编程功能。
Java 11 做了大量整理工作。 Java EE,CORBA 和 Java FX 已从 JDK 中删除。 它们可以从 Maven 仓库中获得。 JavaScript Nashorn 引擎已被弃用。 Java 小程序已被永久删除。
我们下载 OpenJDK 或 Oracle JDK 。
IntelliJ IDEA 2018.2.4 社区版已支持 Java 11。
$ ~/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。
无需使用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.java
Java 11 example
我们使用java
工具启动该程序。
新的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 中有新的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.java
falcon falcon falcon falcon falcon
nice blue sky
nice bluesky
nice blue sky
nice bluesky
false
true
falcon
eagle
sky
wood
forest
这是输出。
有一个新的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.java
dog matches
Dog matches
DOG matches
Doggy does not match
这是输出。
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.java
forest
wood
sky
rock
这是输出。
在本教程中,我们研究了 Java 11 的新编程功能。
您可能也对以下相关教程感兴趣: Java 教程, Java 流过滤器教程。