公式サイト
新機能まとめ
- ラムダ式でのvarを用いた型推論
- HTTP Client
- シングルJavaファイルからの即時Java実行
- Unicode 10のサポート
- 新しいガベージコレクション方式(ZGC)の追加
- セキュリティ機能・APIの強化
- Javaのモニタリング機能の強化
- ファイルからの即時Java実行
試してみる
環境は、win10、Javaは、もちろん、09/25リリースのJava11
手頃そうなものを、とりあえず試す。
ファイルからの即時Java実行
テスト用のJavaファイルの用意
まずは、実行するファイルの用意から。
恒例にしたがって、hello world
の出力だけする簡単なもの
public class SampleJava11 { public static void main(String args[]) throws Exception{ System.out.println("hello world"); } }
ファイル名は、SampleJava11.java
で保存。
実行
コンパイルしたふぁいるを実行するときと同じように実行。
$ java SampleJava11.java hello world
難なく実行できる。
学生時代は、コンパイルして実行を習ったが、今は手軽にできる。
たぶん、コンパイルは習うと思うけど、覚えたらただの手間だから、学習速度は向上しそう。
なんというか、スクリプト言語に近い感じで、即座に確認できるのがいいと思いました。
ラムダ式でも利用できるようになったvarによる型推論
テスト用ファイルの用意
import java.util.List; public class SampleJava11 { public static void main(String args[]) throws Exception{ List.of("はな", "さあや", "ほまれ", "エミル", "ルールー").stream().forEach((var s) -> { System.out.println(s); }); } }
趣味全開でサンプルを書いてみた。
実行
コンパイルが面倒くさいので、さっき覚えた即時Javaファイル実行で実行
$ java LambdaVar.java はな さあや ほまれ エミル ルールー
動く。
Javaを最近使ってないからなんとも言えないが、型情報を書くのが面倒なときに使う感じだろうか?
特に、クラス名が長いのは、見てて苦痛だからね。
クラス名を書かなくて済むのなら、書かないほうが無難そう。
var自体は、Java10で入ったので、特に、大きな違和感なく受け入れられたし、事前学習はできている。
LTSだけ学習していればいいかとも思ったけど、最新バージョンを追っていたほうが、学習範囲が狭くて覚えやすい気がした。
HTTP Client API
今、node使った開発をしている。
提供されたAPIは、nodeで提供されているものがJavaっぽくなった感じの印象を受けた。
JSR & HTTP Client API doc
JEP 321: HTTP Client (Standard)
HttpClient (Java SE 11 & JDK 11 )
テストファイル
import java.net.http.*; import java.net.URI; public class SampleHttpClient { public static void main(String args[]) throws Exception{ HttpClient client = HttpClient.newHttpClient(); HttpRequest getRequest = HttpRequest.newBuilder() .uri(URI.create("https://www.google.co.jp/")) .build(); HttpResponse<String> response = client.send(getRequest, HttpResponse.BodyHandlers.ofString()); System.out.println(response.statusCode()); System.out.println(response.body()); } }
もっとも有名な、Googleさんにアクセスしてみる。
実行
もちろん、即時Javaファイル実行
$ java SampleHttpClient.java 200 <!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="ja"><head><meta content="世界中のあらゆる情報を検索するためのツールを提供しています。さまざまな検索機能を活用して、お探しの情報を見つけてください。" name="description"> ・・・ ;google.jsc && google.jsc.m(m);})();</script></div></body></html>
難なく取れる。
最初、URLをhttps://google.co.jp/
って書いてしまい、ステータスが301
で帰ってきて、マジで焦った。。。
ブラウザでgoogle.co.jp
って打ってもアクセスできる弊害がここに出てくるとは思わなかった。
手軽にWebAPI試したりできたりするのが、便利かな?
curlで済ましてしまいそうな気がしないでもないけど。
Apatch のHttp Clientからの移行が増えそうな気がする。
雑記
Typescript & Javascript + node で開発しているが、なんなく理解できた。
スクリプト言語の特徴が取り込まれつつある気がする。
今後、nodeで使われているようなAPIが増えていくのだろうか?
Promiseとかは、面白いと思う。
今だと、async-awaitかな?
Javaは、マルチスレッドだから必要ないかも知れないけどね。。。
参考サイト
Java 11の変更点を押さえよう! 標準機能になったHTTP Client API (1/3):CodeZine(コードジン)
Java 11正式版がリリース、本バージョンからOracle JDKのサポートは有償に。OpenJDKで無償の長期サポート提供は現時点で期待薄 - Publickey
Java 11正式版がリリース、本バージョンから「Oracle JDK」のサポートは有償に (1/4) - ITmedia エンタープライズ