LLoT2016 Java Update

29
Java Update 高高 高Java 高高高 BOF

Transcript of LLoT2016 Java Update

Page 1: LLoT2016 Java Update

Java Update高橋 徹( Java 読書会 BOF )

Page 2: LLoT2016 Java Update

LLoT Language Update - Java 2

発表者(高橋 徹)について

コミュニティ活動

ブログ等• ブログ http://d.hatena.ne.jp/torutk/

他• Twitter @boochnich

毎月 1 回開催中現時点で209 回開催( 30冊)

2016-08-27

Page 3: LLoT2016 Java Update

LLoT Language Update - Java 3

本日お話すること

Java ってどんな言語?Java が生まれてこの方さいきんの変化スクリプト言語と仲良く

2016-08-27

Page 4: LLoT2016 Java Update

LLoT Language Update - Java 4

Java ってどんな言語?

「 Java 言語仕様 第 3 版」第1章冒頭(ピアソン・エデュケーション 刊、 村上雅章 訳)より

プログラミング言語 Java™ は、並列処理の可能なクラスに基づく汎用目的のオブジェクト指向言語である。

2016-08-27

Page 5: LLoT2016 Java Update

LLoT Language Update - Java 5

Java ってどんな言語?

2016-08-27

CPU ( Intel 、 SPARC 、 ARM等)

OS (各種 UNIX 、 Windows 等)

Java 仮想マシン

Java 標準ライブラリ

Java プログラム Java ソースコード

コンパイルJava の構造

Page 6: LLoT2016 Java Update

LLoT Language Update - Java 62016-08-27

Oracle JDK 8 対応 CPU ・ OS

Java ってどんな言語?

Page 7: LLoT2016 Java Update

LLoT Language Update - Java 7

Java ってどんな言語?

2016-08-27

Java 標準ライブラリ

Page 8: LLoT2016 Java Update

8

Java が生まれてこの方

1.0 1.1 1.2 1.3 1.4 5 6 7 8 9

2016-08-27 LLoT Language Update - Java

1995

1996

1998

2000

2002

2004

2006

2011

2014

2017( 予 )

1.1インナークラ

ス1.4

assert

5ジェネリクスオートボクシ

ング列挙型

拡張 for 文可変長引数

アノテーション

static import

7try-with-resource例外マルチキャッ

チ数値リテラル表記switch 文に String

言語仕様

8ラムダ式

interface に実装可

Page 9: LLoT2016 Java Update

9

Java が生まれてこの方

1.0 1.1 1.2 1.3 1.4 5 6 7 8 9

2016-08-27 LLoT Language Update - Java

1995

1996

1998

2000

2002

2004

2006

2011

2014

2017( 予 )

1.1インナークラ

ス1.4

assert

5ジェネリクスオートボクシ

ング列挙型

拡張 for 文可変長引数

アノテーション

static import

7try-with-resource例外マルチキャッ

チ数値リテラル表記switch 文に String

言語仕様

8ラムダ式

interface に実装可

10 年に 1 回、大きな改訂

Page 10: LLoT2016 Java Update

10

Java が生まれてこの方

1.0 1.1 1.2 1.3 1.4 5 6 7 8 9

2016-08-27 LLoT Language Update - Java

1995

1996

1998

2000

2002

2004

2006

2011

2014

2017( 予 )

1.1国際化リフレクションJDBC

1.2Swing/Java2D

CORBA

1.3JNDI

SoundTimer

1.4正規表現ロギング

XMLSSL/TSL

Preferenceイメージ

I/ONIO

標準ライブラリ7

NIO.28

Stream日時

JavaFX5

並行処理JMX

Page 11: LLoT2016 Java Update

LLoT Language Update - Java 11

Java が生まれてこの方

2016-08-27

標準ライブラリの成長

1.0.2

1.1 1.2 1.3 1.4 5 6 7 80

50010001500200025003000350040004500

0

50

100

150

200

250

クラス数パッケージ数

Java バージョン

クラ

ス数

パッ

ケー

ジ数

Page 12: LLoT2016 Java Update

LLoT Language Update - Java 12

Java が生まれてこの方

• 互換性のポリシー

2016-08-27

Java バージョン N で提供する API を使うプログラムは、再コンパイルせずにJava バージョン N+1 で動作すべきである。

提供する API は前もって予告( deprecate )したうえで削除することが可能。

→ deprecate はあるが削除された API はない

Page 13: LLoT2016 Java Update

LLoT Language Update - Java 13

Java が生まれてこの方

• 互換性のポリシー

2016-08-27

Java バージョン N で提供する API を使うプログラムは、再コンパイルせずにJava バージョン N+1 で動作すべきである。

提供する API は前もって予告( deprecate )したうえで削除することが可能。

→ deprecate はあるが削除された API はない

コンパイルしたクラスファイルは新しい Java バージョンでも動くよ。

標準 API は消さないから 20 年前のコードも動くよ

Page 14: LLoT2016 Java Update

14

Java が生まれてこの方

1.0 1.1 1.2 1.3 1.4 5 6 7 8 9

2016-08-27 LLoT Language Update - Java

1995

1996

1998

2000

2002

2004

2006

2011

2014

2017( 予 )

Java 仮想マシン

Classic VM

HotSpot VM

JIT コンパイラ

Adaptive コンパイラ、世代別 GCCMS GC

G1GC

Page 15: LLoT2016 Java Update

LLoT Language Update - Java 15

Java Update – Java SE 8• ラムダ式• interface へ static/default メソッド(実装記述)• タイプアノテーション

2016-08-27

• Intel CPU の AES-NI 対応

• Streams API• Date and Time API• JavaFX

言語仕様

標準ライブラリ

仮想マシン

Page 16: LLoT2016 Java Update

LLoT Language Update - Java 16

Java Update – Java SE 8• ラムダ式

インタフェースのインスタンスを生成(従来)

2016-08-27

class クラス名 implements インタフェース名 { 戻り値型 メソッド名 ( 引数リスト ) { 処理 }}

インタフェース名 変数名 = new クラス名 ();

Page 17: LLoT2016 Java Update

LLoT Language Update - Java 17

Java Update – Java SE 8• ラムダ式

インタフェースのインスタンスを生成

2016-08-27

インタフェース名 変数名 = ( 引数リスト ) -> { 処理 };

Page 18: LLoT2016 Java Update

LLoT Language Update - Java 18

Java Update – Java SE 8• ラムダ式

コールバック処理(オブザーバーパターン)を匿名クラスで実装

2016-08-27

button.setOnAction(new EventHandler<ActionEvent>() { @Override public void handle(ActionEvent event) { model.execute(); }});

Page 19: LLoT2016 Java Update

LLoT Language Update - Java 19

Java Update – Java SE 8• ラムダ式

コールバック処理(オブザーバーパターン)をラムダ式で実装

2016-08-27

button.setOnAction( event -> model.execute() );

• コマンドパターン• ストラテジーパターン• テンプレートメソッドパターンなどにも適用可

Page 20: LLoT2016 Java Update

LLoT Language Update - Java 20

Java Update – Java SE 8• インタフェースへの実装

従来、メソッドはシグニチャ定義のみ

実装を持つ次の 2 種類のメソッドを定義できる1) static メソッド2) default メソッド

2016-08-27

Page 21: LLoT2016 Java Update

LLoT Language Update - Java 21

Java Update – Java SE 8• インタフェースへの実装

1) static メソッドの実装

2) default メソッドの実装

2016-08-27

interface HelloEntry { static void main(String... args) { System.out.prinln(“I’m an interface.”); }}

interface Greet { default void greet() { System.out.prinln(“Hello an interface.”); }}

Page 22: LLoT2016 Java Update

LLoT Language Update - Java 22

Java Update – Java SE 8• インタフェースへの実装

メリット)既存のインタフェースにメソッドを追加しても壊れない

2016-08-27

interface Alfavoid m1();

class Bravovoid m1() { 処理 ;}

void m2(); を追加するとBravo がコンパイルエラー

default void m2() { 処理 ;} の追加なら Bravo は壊れない

Page 23: LLoT2016 Java Update

LLoT Language Update - Java 23

JavaFX 8NASA Tracking and Orbit Determination Quality Viewer

2016-08-27https://dzone.com/articles/nasa-conjunction-assessment

Java Update – Java SE 8

Page 24: LLoT2016 Java Update

LLoT Language Update - Java 24

Java Update – Java SE 9大きな変更• 新たなモジュール機能を搭載 標準ライブラリをモノリシックからモジュール化

• REPL 環境

2016-08-27

Page 25: LLoT2016 Java Update

LLoT Language Update - Java 25

Java Update – Java SE 9モジュール化( Jigsaw )• 依存関係、バージョン番号を付与した新たな構造

• Java 標準ライブラリをモジュール化

• アプリケーションもモジュールとして作成可

• アプリケーションの実行に必要なモジュールだけを抽出して配布

2016-08-27

Page 26: LLoT2016 Java Update

LLoT Language Update - Java 26

Java Update – Java SE 9REPL 環境

2016-08-27

Page 27: LLoT2016 Java Update

LLoT Language Update - Java 27

Script 言語とおともだちに

• JavaScriptJava SE 標準搭載jjs コマンドで JavaScript 実行JavaScript テキストを実行する API

• JRubyhttp://jruby.org/Ruby 2.3 対応

• Jythonhttp://www.jython.org/Python 2.7 対応

2016-08-27

Page 28: LLoT2016 Java Update

LLoT Language Update - Java 28

ご清聴ありがとうございました

2016-08-27

Page 29: LLoT2016 Java Update

LLoT Language Update - Java 29

Java Update – Java SE 8• メソッド参照

インタフェースのインスタンスを生成する別な方法

2016-08-27

インタフェース名 変数名 = 変数名 :: メソッド名 ;

インタフェース名 変数名 = クラス名 :: メソッド名 ;