エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

Java11の新機能まとめと試し実行

公式サイト

JDK 11

JDK 11 GA Release

新機能まとめ

試してみる

環境は、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 エンタープライズ

Java 11正式版リリース、3年の長期サポート対応のLTSバージョンが4年半ぶりに更新 - GIGAZINE