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
這些例子這裡不做詳細介紹了,如有需要請參考ofollow,noindex" target="_blank">官方例子 。 功能很強大吧,我們不用再引入其他的HttpClient的jar包了。
三、總結
對於一線開發者而言,JAVA 11的體驗就這麼多,如有遺漏,會在以後補充。