跳转至

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

我们下载 OpenJDKOracle 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。

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.java
Java 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.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

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

这是输出。

文件readStringwriteString

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 流过滤器教程



回到顶部