---
# System prepended metadata

title: Java11のあれこれ

---

# Java11のあれこれ

## Java11の話題
* Oracle Javaの最新版(2019/08/30現在)
* 現時点で無償サポートされているバージョンはこれのみ
* **商用で利用する場合、有償サポート契約が必要**(個人、開発は無償で利用可能)

　↓↓↓

* Oracle Java8を利用しているアプリケーションは今まで通りアップデートを行う際、どうするか考える必要が発生
* 少なくとも、Java8を無償でこのまま使うのはセキュリティ上よくない

1. 費用払ってアップデート
2. 別の言語に移行
3. システム終了…？？？

#### エンジニアとして、どのような場面でも対処できるようになりたい
<br/>
<br/>
<br/>


## 今回は「アップデート」した場合の話
* Java11の情報を調べても、有償化される話ばかり
* 「こんな機能が追加された！」という話題が少ない
→　どんな機能が追加されたのかの情報が乏しい
<br/>
<br/>
<br/>
## Java11で追加された機能
いくつかピックアップして触ってみました

追加機能の詳細はここ
https://openjdk.java.net/projects/jdk/11/

### 1.ファイルからの即時Java実行
https://openjdk.java.net/jeps/330
単一のJavaファイルであれば、コンパイル処理をせずに実行できるようになった

***ex.「Hello World!」を表示する***
①適当なjavaファイルを用意
```
public class HelloWorld {
    public static void main(String args[]) throws Exception{
        System.out.println("hello world!");
    }
}
```
②実行コマンドをたたく(コンパイルコマンド(javac不要))
```
$ java HelloWorld.java
```
③動く！
```
hello world!
```

### 2.Lambda式での暗黙的型指定
https://openjdk.java.net/jeps/323
java10のアップデートで利用できるようになった「var」型の型推論機能。
java11にて、Lambda式にも対応しました

***ex.リストに入れた初台メンバー名を表示する***
①適当なjavaファイルを用意
```
import java.util.List;
public class Lambda {
  public static void main(String args[]) throws Exception{
    List.of("higuhigu", "sattumii", "icchii").stream().forEach((var s) -> {
        System.out.println(s);
    });
  }
}
```
②実行コマンドをたたく(ここでも即時実行試した)
```
$ java Lambda.java
```
③動く！
```
higuhigu
sattumii
icchii
```

### 3.HttpClientAPI
https://openjdk.java.net/jeps/321
ModanAPiやHTTP2,WebSocket,Reactiveに対応した。
他のサービスを使用しなくてもある程度Javaで記述できるようになった。

***ex.Homegrowinのウェブページにアクセスする***
①適当なjavaファイルを用意
```
import java.net.http.*;
import java.net.URI;
public class TestHttpClient {
  public static void main(String args[]) throws Exception{
    HttpClient client = HttpClient.newHttpClient();
    HttpRequest getRequest = HttpRequest.newBuilder()
      .uri(URI.create("https://homegrowin.jp/"))
      .build();
    HttpResponse<String> response = client.send(getRequest, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.statusCode());
    System.out.println(response.body());
  }
}
```
②実行コマンドをたたく(ここでも即時実行試した)
```
$ TestHttpClient.java
```
③動く！
![](https://i.imgur.com/Rjl6djq.png)
<br/>
<br/>
<br/>

## 所感
* 機能について
→　オブジェクト指向言語としての「Java」だが、単純なものに対してスクリプト言語感が出てきた
→　昔からJava使ってる人は、レビュー等するとき違和感感じるかも

* 有償化について
→　他言語へ移行等の話もでたりしているが、メリット/デメリットの判断が必要
→　個人的には、マルチプラットフォームで動くJavaで、上記のような機能追加がある以上他言語移行よりリスク低いイメージ

#### 新しい機能は積極的に使っていこう
#### ※Java8Bronze勉強の人、混乱させる内容だったらごめんなさい！！
<br/>
<br/>
<br/>

## 参考資料
https://www.orangeitems.com/entry/2018/02/08/152022