Weitere ähnliche Inhalte
Ähnlich wie LLoT2016 Java Update (20)
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 8
1995 1996 1998 2000 2002 2004 2006 2011 2014 2017(予)
1.1
インナークラス
1.4
assert
5
ジェネリクス
オートボクシング
列挙型
拡張for文
可変長引数
アノテーション
static import
7
try-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 9
1995 1996 1998 2000 2002 2004 2006 2011 2014 2017(予)
1.1
インナークラス
1.4
assert
5
ジェネリクス
オートボクシング
列挙型
拡張for文
可変長引数
アノテーション
static import
7
try-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 10
1995 1996 1998 2000 2002 2004 2006 2011 2014 2017(予)
1.1
国際化
リフレクション
JDBC
1.2
Swing/Java2D
CORBA
1.3
JNDI
Sound
Timer
1.4
正規表現
ロギング
XML
SSL/TSL
Preference
イメージI/O
NIO
標準ライブラリ
7
NIO.2
8
Stream
日時
JavaFX
5
並行処理
JMX
- 11. Javaが生まれてこの方
2016-08-27 LLoT Language Update - Java 11
標準ライブラリの成長
0
50
100
150
200
250
0
500
1000
1500
2000
2500
3000
3500
4000
4500
1.0.2 1.1 1.2 1.3 1.4 5 6 7 8
パッケージ数
クラス数
Javaバージョン
クラス数
パッケージ数
- 12. Javaが生まれてこの方
• 互換性のポリシー
2016-08-27 LLoT Language Update - Java 12
Java バージョンNで提供するAPIを使う
プログラムは、再コンパイルせずに
JavaバージョンN+1で動作すべきである。
提供するAPIは前もって予告(deprecate)
したうえで削除することが可能。
→ deprecateはあるが削除されたAPIはない
- 13. Javaが生まれてこの方
• 互換性のポリシー
2016-08-27 LLoT Language Update - Java 13
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 14
1995 1996 1998 2000 2002 2004 2006 2011 2014 2017(予)
Java仮想マシン
Classic VM
HotSpot VM
JIT コンパイラ
Adaptiveコンパイラ、世代別GC
CMS GC
G1GC
- 15. Java Update – Java SE 8
• ラムダ式
• interfaceへstatic/defaultメソッド(実装記述)
• タイプアノテーション
2016-08-27 LLoT Language Update - Java 15
• Intel CPUのAES-NI対応
• Streams API
• Date and Time API
• JavaFX
言語仕様
標準ライブラリ
仮想マシン
- 16. Java Update – Java SE 8
• ラムダ式
インタフェースのインスタンスを生成(従来)
2016-08-27 LLoT Language Update - Java 16
class クラス名 implements インタフェース名 {
戻り値型 メソッド名(引数リスト) {
処理
}
}
インタフェース名 変数名 = new クラス名();
- 17. Java Update – Java SE 8
• ラムダ式
インタフェースのインスタンスを生成
2016-08-27 LLoT Language Update - Java 17
インタフェース名 変数名 = (引数リスト) -> {処理};
- 18. Java Update – Java SE 8
• ラムダ式
コールバック処理(オブザーバーパターン)を
匿名クラスで実装
2016-08-27 LLoT Language Update - Java 18
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
model.execute();
}
});
- 19. Java Update – Java SE 8
• ラムダ式
コールバック処理(オブザーバーパターン)を
ラムダ式で実装
2016-08-27 LLoT Language Update - Java 19
button.setOnAction( event -> model.execute() );
• コマンドパターン
• ストラテジーパターン
• テンプレートメソッドパターン
などにも適用可
- 20. Java Update – Java SE 8
• インタフェースへの実装
従来、メソッドはシグニチャ定義のみ
実装を持つ次の2種類のメソッドを定義できる
1)staticメソッド
2)defaultメソッド
2016-08-27 LLoT Language Update - Java 20
- 21. Java Update – Java SE 8
• インタフェースへの実装
1)static メソッドの実装
2)defaultメソッドの実装
2016-08-27 LLoT Language Update - Java 21
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.”);
}
}
- 22. Java Update – Java SE 8
• インタフェースへの実装
メリット)既存のインタフェースにメソッドを追加
しても壊れない
2016-08-27 LLoT Language Update - Java 22
interface Alfa
void m1();
class Bravo
void m1() {
処理;
}
void m2(); を追加すると
Bravoがコンパイルエラー
default void m2() {
処理;
}
の追加ならBravoは壊れない
- 23. JavaFX 8
NASA Tracking and Orbit Determination Quality Viewer
2016-08-27 LLoT Language Update - Java 23
https://dzone.com/articles/nasa-conjunction-assessment
Java Update – Java SE 8
- 24. Java Update – Java SE 9
大きな変更
• 新たなモジュール機能を搭載
標準ライブラリをモノリシックからモジュール化
• REPL環境
2016-08-27 LLoT Language Update - Java 24
- 25. Java Update – Java SE 9
モジュール化(Jigsaw)
• 依存関係、バージョン番号を付与した新たな構造
• Java標準ライブラリをモジュール化
• アプリケーションもモジュールとして作成可
• アプリケーションの実行に必要な
モジュールだけを抽出して配布
2016-08-27 LLoT Language Update - Java 25
- 26. Java Update – Java SE 9
REPL環境
2016-08-27 LLoT Language Update - Java 26
- 29. Java Update – Java SE 8
• メソッド参照
インタフェースのインスタンスを生成する別な方法
2016-08-27 LLoT Language Update - Java 29
インタフェース名 変数名 = 変数名::メソッド名;
インタフェース名 変数名 = クラス名::メソッド名;