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

More Related Content

What's hot

Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
Shinobu Okano
 
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみるJavascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
y torazuka
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
Satoshi Kubo
 
第8回ファントムタイプ勉強会xtendとgwt
第8回ファントムタイプ勉強会xtendとgwt第8回ファントムタイプ勉強会xtendとgwt
第8回ファントムタイプ勉強会xtendとgwt
yusuke kokubo
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
Syouta Tada
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
irix_jp
 

What's hot (20)

play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
Nds#24 単体テスト
Nds#24 単体テストNds#24 単体テスト
Nds#24 単体テスト
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
 
JavaScript基礎勉強会
JavaScript基礎勉強会JavaScript基礎勉強会
JavaScript基礎勉強会
 
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみるJavascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
 
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
 
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス「愛されたい!」と思ったときにJavaで書くRubyクラス
「愛されたい!」と思ったときにJavaで書くRubyクラス
 
Java9新機能概要
Java9新機能概要Java9新機能概要
Java9新機能概要
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
 
JavaScript MVC入門
JavaScript MVC入門JavaScript MVC入門
JavaScript MVC入門
 
scala-kaigi1-sbt
scala-kaigi1-sbtscala-kaigi1-sbt
scala-kaigi1-sbt
 
第8回ファントムタイプ勉強会xtendとgwt
第8回ファントムタイプ勉強会xtendとgwt第8回ファントムタイプ勉強会xtendとgwt
第8回ファントムタイプ勉強会xtendとgwt
 
JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介JavaScriptユーティリティライブラリの紹介
JavaScriptユーティリティライブラリの紹介
 
Phpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろうPhpフレームワーク 「laravel」でブログを作ろう
Phpフレームワーク 「laravel」でブログを作ろう
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 
OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門OSC2011Tokyo/Fall OpenStack Swift入門
OSC2011Tokyo/Fall OpenStack Swift入門
 

Similar to LLoT2016 Java Update

JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
Yuichi Sakuraba
 
JavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project VisageJavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project Visage
Yuichi Sakuraba
 
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
guestc68147
 

Similar to LLoT2016 Java Update (20)

実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)実行可能JavaFXアプリケーションJAR(発表直前版)
実行可能JavaFXアプリケーションJAR(発表直前版)
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
 
2011年javaの旅
2011年javaの旅2011年javaの旅
2011年javaの旅
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 
LL2021 Java update
LL2021 Java updateLL2021 Java update
LL2021 Java update
 
JavaエンタープライズアーキテクチャにおけるHTML5 - Enterprise ☓ HTML5 Web Application Conference ...
JavaエンタープライズアーキテクチャにおけるHTML5 - Enterprise ☓ HTML5 Web Application Conference ...JavaエンタープライズアーキテクチャにおけるHTML5 - Enterprise ☓ HTML5 Web Application Conference ...
JavaエンタープライズアーキテクチャにおけるHTML5 - Enterprise ☓ HTML5 Web Application Conference ...
 
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX UpdateJavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
 
Trait in scala
Trait in scalaTrait in scala
Trait in scala
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
 
JavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project VisageJavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project Visage
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
Hello Java
Hello JavaHello Java
Hello Java
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
Fundamental Java
Fundamental JavaFundamental Java
Fundamental Java
 
Fundamental Java
Fundamental JavaFundamental Java
Fundamental Java
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
A Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its ApplicationA Prolog To Java Translator System And Its Application
A Prolog To Java Translator System And Its Application
 

More from torutk

Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
torutk
 
Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動
torutk
 

More from torutk (7)

Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
 
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
 
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリーク
 

LLoT2016 Java Update

  • 2. 発表者(高橋 徹)について コミュニティ活動 ブログ等 • ブログ http://d.hatena.ne.jp/torutk/ 他 • Twitter @boochnich 毎月1回開催中 現時点で 209回開催(30冊) LLoT Language Update - Java2016-08-27 2
  • 4. Javaってどんな言語? 「Java言語仕様 第3版」第1章冒頭 (ピアソン・エデュケーション 刊、 村上雅章 訳)より プログラミング言語Java™は、 並列処理の可能な クラスに基づく 汎用目的のオブジェクト指向言語である。 LLoT Language Update - Java2016-08-27 4
  • 5. Javaってどんな言語? 2016-08-27 LLoT Language Update - Java 5 CPU(Intel、SPARC、ARM等) OS(各種UNIX、Windows等) Java仮想マシン Java標準ライブラリ Javaプログラム Javaソースコード コンパイル Javaの構造
  • 6. 2016-08-27 LLoT Language Update - Java 6 Oracle JDK 8対応CPU・OS Javaってどんな言語?
  • 7. Javaってどんな言語? 2016-08-27 LLoT Language Update - Java 7 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 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
  • 27. Script言語とおともだちに • JavaScript Java SE標準搭載 jjsコマンドでJavaScript実行 JavaScriptテキストを実行するAPI • JRuby http://jruby.org/ Ruby 2.3対応 • Jython http://www.jython.org/ Python 2.7対応 2016-08-27 LLoT Language Update - Java 27
  • 29. Java Update – Java SE 8 • メソッド参照 インタフェースのインスタンスを生成する別な方法 2016-08-27 LLoT Language Update - Java 29 インタフェース名 変数名 = 変数名::メソッド名; インタフェース名 変数名 = クラス名::メソッド名;