JAVA 11初體驗


JAVA 11初體驗

  隨着JAVA沒半年發布一次新版本,前幾天JAVA 11隆重登場。在JAVA 11中,增加了一些新的特性和api, 同時也刪除了一些特性和api,還有一些性能和垃圾回收的改進。

  作為一名一線的開發人員,JAVA 11給我們帶來哪些便利之處呢?下面我們來體驗一下。

一、在Lambda表達式中使用var

  本地變量類型var是java 10提出的新概念,它可以從上下文中推斷出本地變量的類型,從而提高代碼可讀性。 我們看看下面的例子:

public class Main {
    public static void main(String[] args) throws Exception {
        URL url = new URL("http://www.oracle.com/");
        URLConnection conn = url.openConnection();
        Reader reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
    }
}

  使用var聲明后,上面的代碼可以改寫成:

public class Main {
    public static void main(String[] args) throws Exception {
        var url = new URL("http://www.oracle.com/");
        var conn = url.openConnection();
        var reader = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));
    }
}

  我們使用var代替了URL、URLConnection、Reader,提高了代碼的可讀性,也方便了開發。 但是在JAVA 10中,var變量不能在lambda表達式中聲明,在JAVA 11中,解決了這個問題。 我們可以在lambda表達式中使用var,如下:

(var x, var y) -> x.process(y)

上面的例子等同於

(x, y) -> x.process(y)

但是我們不能混合使用,下面的兩個例子都是錯誤的:

//含蓄型的lambda表達式中,要么全使用var,要么全不使用var
(var x, y) -> x.process(y)

//在lambda表達式中,不能即使用含蓄型,又使用明確型
(var x, int y) -> x.process(y)

二、標准化HTTP Client API

  以前我們在程序中使用HttpClient時,通常會引入apache的HttpClient工具包。在JAVA 11中,我們可以使用JDK原生的 HttpClient了。

public class HttpTest {
    public static void main(String[] args) throws Exception {
        String uri = "http://www.baidu.com";

        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(uri))
                .build();

        HttpResponse<String> response =
                client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}

  上面的例子是同步的get請求,還有其他的方法HttpClient也是提供的,例如:

  • 異步get
  • post提交
  • 並發請求
  • Get Json
  • Post Json

  這些例子這里不做詳細介紹了,如有需要請參考官方例子。 功能很強大吧,我們不用再引入其他的HttpClient的jar包了。

三、總結

  對於一線開發者而言,JAVA 11的體驗就這么多,如有遺漏,會在以后補充。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM