LLoT2016 Java Update
-
Upload
torutk -
Category
Engineering
-
view
298 -
download
1
Transcript of LLoT2016 Java Update
Java Update高橋 徹( Java 読書会 BOF )
LLoT Language Update - Java 2
発表者(高橋 徹)について
コミュニティ活動
ブログ等• ブログ http://d.hatena.ne.jp/torutk/
他• Twitter @boochnich
毎月 1 回開催中現時点で209 回開催( 30冊)
2016-08-27
LLoT Language Update - Java 3
本日お話すること
Java ってどんな言語?Java が生まれてこの方さいきんの変化スクリプト言語と仲良く
2016-08-27
LLoT Language Update - Java 4
Java ってどんな言語?
「 Java 言語仕様 第 3 版」第1章冒頭(ピアソン・エデュケーション 刊、 村上雅章 訳)より
プログラミング言語 Java™ は、並列処理の可能なクラスに基づく汎用目的のオブジェクト指向言語である。
2016-08-27
LLoT Language Update - Java 5
Java ってどんな言語?
2016-08-27
CPU ( Intel 、 SPARC 、 ARM等)
OS (各種 UNIX 、 Windows 等)
Java 仮想マシン
Java 標準ライブラリ
Java プログラム Java ソースコード
コンパイルJava の構造
LLoT Language Update - Java 62016-08-27
Oracle JDK 8 対応 CPU ・ OS
Java ってどんな言語?
LLoT Language Update - Java 7
Java ってどんな言語?
2016-08-27
Java 標準ライブラリ
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 に実装可
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 回、大きな改訂
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
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 バージョン
クラ
ス数
パッ
ケー
ジ数
LLoT Language Update - Java 12
Java が生まれてこの方
• 互換性のポリシー
2016-08-27
Java バージョン N で提供する API を使うプログラムは、再コンパイルせずにJava バージョン N+1 で動作すべきである。
提供する API は前もって予告( deprecate )したうえで削除することが可能。
→ deprecate はあるが削除された API はない
LLoT Language Update - Java 13
Java が生まれてこの方
• 互換性のポリシー
2016-08-27
Java バージョン N で提供する API を使うプログラムは、再コンパイルせずにJava バージョン N+1 で動作すべきである。
提供する API は前もって予告( deprecate )したうえで削除することが可能。
→ deprecate はあるが削除された API はない
コンパイルしたクラスファイルは新しい Java バージョンでも動くよ。
標準 API は消さないから 20 年前のコードも動くよ
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
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
言語仕様
標準ライブラリ
仮想マシン
LLoT Language Update - Java 16
Java Update – Java SE 8• ラムダ式
インタフェースのインスタンスを生成(従来)
2016-08-27
class クラス名 implements インタフェース名 { 戻り値型 メソッド名 ( 引数リスト ) { 処理 }}
インタフェース名 変数名 = new クラス名 ();
LLoT Language Update - Java 17
Java Update – Java SE 8• ラムダ式
インタフェースのインスタンスを生成
2016-08-27
インタフェース名 変数名 = ( 引数リスト ) -> { 処理 };
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(); }});
LLoT Language Update - Java 19
Java Update – Java SE 8• ラムダ式
コールバック処理(オブザーバーパターン)をラムダ式で実装
2016-08-27
button.setOnAction( event -> model.execute() );
• コマンドパターン• ストラテジーパターン• テンプレートメソッドパターンなどにも適用可
LLoT Language Update - Java 20
Java Update – Java SE 8• インタフェースへの実装
従来、メソッドはシグニチャ定義のみ
実装を持つ次の 2 種類のメソッドを定義できる1) static メソッド2) default メソッド
2016-08-27
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.”); }}
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 は壊れない
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
LLoT Language Update - Java 24
Java Update – Java SE 9大きな変更• 新たなモジュール機能を搭載 標準ライブラリをモノリシックからモジュール化
• REPL 環境
2016-08-27
LLoT Language Update - Java 25
Java Update – Java SE 9モジュール化( Jigsaw )• 依存関係、バージョン番号を付与した新たな構造
• Java 標準ライブラリをモジュール化
• アプリケーションもモジュールとして作成可
• アプリケーションの実行に必要なモジュールだけを抽出して配布
2016-08-27
LLoT Language Update - Java 26
Java Update – Java SE 9REPL 環境
2016-08-27
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
LLoT Language Update - Java 28
ご清聴ありがとうございました
2016-08-27
LLoT Language Update - Java 29
Java Update – Java SE 8• メソッド参照
インタフェースのインスタンスを生成する別な方法
2016-08-27
インタフェース名 変数名 = 変数名 :: メソッド名 ;
インタフェース名 変数名 = クラス名 :: メソッド名 ;