SlideShare a Scribd company logo
1 of 70
Download to read offline
Java SE 7 ってなんじゃらほい?

      2011年6月15日
        飯野 卓見
自己紹介
• 飯野 卓見(@troter)
• 株式会社タイムインターメディア所属
  – 技術者募集してます!
• (PHP|Ruby) → Javaプログラマ
はじめに
• JavaSE7の更新を全てフォローは無理だった
• なので普通のプログラマが使いそうな部分に
  絞って説明
 – 僕の主観
• 普通のプログラマを超えたい人は?
 – 参考資料見て自分で試そう
アジェンダ
• 自己紹介(済)
• はじめに(済)
• Java SE 7って?
  – 構文の拡張(Project Coin)
  – 新しい入出力API(NIO.2)
  – その他JDKの更新
• Java SE 7を試す
• 参考資料
Java SE 7 って?
Java SE 7って?
• Java SE 5 以来の構文の拡張
  – でも少しだけ。(大きな変更はJavaSE8待ち)
• 新しい入出力API
• その他、たくさんの更新
  – JDBC4.1とかUnicode6.0とかJAXBとか、並列コレク
    ションとか、etc
• 詳しくは
  http://openjdk.java.net/projects/jdk7/feature
  s/
Java SE 7 リリーススケジュール
• 2011年7月7日リリース
 – 本当?
 – http://openjdk.java.net/projects/jdk7/ は更新さ
   れていない。。。
今回説明するJavaSE7の更新
• 構文の拡張
 – JSR 334: Small language enhancements
  (Project Coin)
• 新しい入出力API
 – JSR 203: More new I/O APIs for the Java platform
  (NIO.2)
• その他JDKの更新
今回説明しないこと
• core
  – Upgrade class-loader architecture
  – Method to close a URLClassLoader
  – Concurrency and collections updates (jsr166y)
• vm
  – JSR 292: Support for dynamically-typed languages
    (InvokeDynamic)
  – Strict class-file checking
今回説明しないこと
• i18n
  – Unicode 6.0
  – Locale enhancement
  – Separate user locale and user-interface locale
• ionet
  –   NIO.2 filesystem provider for zip/jar archives
  –   Stream Control Transmission Protocol(Solaris)
  –   Sockets Direct Protocol(Solaris and Linux)
  –   Use the Windows Vista IPv6 stack(windows)
  –   TLS 1.2
今回説明しないこと
• sec
   – Elliptic-curve cryptography (ECC)
• jdbc
   – JDBC 4.1
• client
   –   XRender pipeline for Java 2D
   –   Create new platform APIs for 6u10 graphics features
   –   Nimbus look-and-feel for Swing
   –   Swing JLayer component
   –   Gervill sound synthesizer
今回説明しないこと
• web
  – JAXP 1.4
  – JAXB 2.2a
  – JAX-WS 2.2
• mgmt
  – Enhanced MBeans
Java SE 8予定のもの
• JSR 294: Language and VM support for
  modular programming
• JSR 308: Annotations on Java types
• JSR TBD: Language support for collections
• JSR TBD: Project Lambda
• Modularization (Project Jigsaw)
• JSR 296: Swing application framework
• Swing JDatePicker component
構文の拡張(Project Coin)
構文の拡張(Project Coin)
• switch文で文字列が利用できる
• 数値リテラル構文の拡張
• 例外ハンドリングの改良
• ジェネリックスなインスタンス生成時の型推論
  改善
• try-with-resouces構文の追加
• 可変長引数メソッドの単純化
switch文で文字列が利用できる
• Java SE 6 までの世界
switch文で文字列が利用できる
switch文で文字列が利用できる

              switchにnullを渡すとNullPointerException
                   何のためのdefaultJavaなら当たり前


              caseで正規表現が利用できるわけではない
                  パターンマッチは今まで通りif文で




  Javaなのに全体的にPHPっぽい
  なんか、悪いプログラミングスタイルを助長する気が、、、
数値リテラル構文の拡張
数値リテラル構文の拡張


     ‘0b’から始まる2進表記の追加




     ‘_’(アンダースコア)表記の追加
         Rubyでは当たり前
例外ハンドリングの改良
• Java SE 6 までの世界
例外ハンドリングの改良
例外ハンドリングの改良




  例外を並べることにより、
  catchをだらだら並べる必要は無くなった
ジェネリックスなインスタンス生成時の
       型推論改善
• Java SE 6 までの世界
ジェネリックスなインスタンス生成時の
       型推論改善
ジェネリックスなインスタンス生成時の
       型推論改善




                     冗長性がなくなった




  型変数を型変数にキャストする事が可能に!
try-with-resouces構文の追加
• Java SE 6 までの世界
try-with-resouces構文の追加
try-with-resouces構文の追加



                  java.lang.AutoCloseableを継承したクラスを宣言可能
                  tryを抜けた時にAutoClosable.close()が呼び出される




この構文によりcommons-ioのIOUtils. closeQuietly()は御役御免
try-with-resouces構文の中身
try-with-resouces構文の中身
                   Resouces


       Try-block




       Catch-block
       Finally-block
構文の拡張(Project Coin)まとめ

• Java SE 5 の拡張for文の様に必ず利用する事

• ただ、switch文の文字列の利用は気をつけて
 – null-safeじゃない。
新しい入出力API(NIO.2)
新しい入出力API(NIO.2)
• java.nio.file パッケージ
 –   java.nio.file.Path
 –   java.nio.file.FileSystem
 –   java.nio.file.Paths
 –   java.nio.file.Files
• java.nio.channels非同期関連のクラスの更新
 – 普通のプログラマは使わないので割愛
java.nio.file パッケージ
• ファイルシステム固有の情報にアクセスする
  ための新しいAPI群
 – シンボリックリンク作れる!
 – ファイルの所有者が取得できる!などなど
• ファイル操作のための新しいAPI群
 – commons-ioの機能が取り込まれたイメージ
• 既存のjava.ioとの連携可能
• 新しい(そして詳しい)Exceptionを投げる
java.nio.file.Path
• java.nio.fileの基本となるインターフェース
  – java.nio.fileの多くのメソッドはPathを引数に取る
• ファイルシステムに依存したPathを作成
  – java.nio.file.FileSystemがファクトリ


• Path.toFile()、File.toPath()で相互変換可能
java.nio.file.Path
• Pathに対する操作
java.nio.file.Path
• Pathからの情報取得、述語
java.nio.file.FileSystem
• 名前の通り各ファイルシステムの操作を提供
• getPath()でPathの作成

• getRootDirectories()でディレクトリの列挙
java.nio.file.FileSystem
• getPathMatcher()でPathMatcherの作成
  – javaでglobが利用可能に
java.nio.file.Paths
• java.nio.file.Pathを文字列もしくはURIから作
  成するファクトリクラス

• Pathsを使わない場合(長い)
java.nio.file.Files
• org.apache.commons.io.FileUtilsに相当
  –   ファイル、ディレクトリの作成、削除
  –   書き込み、コピー、移動
  –   述語
  –   属性の確認
  –   ディレクトリの走査
  –   java.io.((In|Out)putStream|Reader|Writer)の作成
  –   などなど、今までなかったのが不思議なものが
      あります。
java.nio.file.Files
• ファイル、ディレクトリの作成、削除
java.nio.file.Files
• 書き込み、コピー、移動
java.nio.file.Files
• 述語
java.nio.file.Files
• 属性の確認
java.nio.file.Files
• java.io.((In|Out)putStream|Reader|Writer)の
  作成
java.nio.file.Files
• ディレクトリの走査(newDirectoryStream)
java.nio.file.Files
• ディレクトリの走査(walkFileTree)
新しい入出力API(NIO.2)まとめ
• ファイル操作のための二つ目の方法

• java.ioを利用しているコードはいつでも
  java.nio.fileの機能を利用できる。
 – 全部Pathベースに書き直す必要はない


• ファイルシステム依存の操作をしないのであ
  れば、java.io + comons-ioでも問題ない。
その他JDKの更新
その他JDKの更新
• java.lang.(Boolean|Byte|Short|Integer|Long).
  compare
• java.util.Objects追加

• 位しかめぼしい物見つからなかった
java.lang.(…).compare
• 簡単に比較できるようになった
java.util.Objects
• org.apache.commons.lang.ObjectUtils的な物
• null-safeなtoString、hashCode、equals



• assertの様に利用できるrequireNonNull
Java SE 7 を試す
Java SE 7 を試す
• JDK7 をダウンロード&インストール
 – http://jdk7.java.net/download.html
• Java SE 7 対応のIDEのインストール
 – Emacs、Vim普通の人使わない
 – Eclipse当分対応しない
 – NetBeans7.0
 – IntelliJ IDEA 10.5
JDK7をダウンロード&インストール
• http://jdk7.java.net/download.html
Java SE 7をNetBeans 7.0で試す
NetBeans7.0の場合
• メニューからJavaプラットフォームを選択
NetBeans7.0の場合
• Javaプラットフォームを追加
NetBeans7.0の場合
• 個々のプロジェクトのプロパティでJDK7の設
  定を行う。
NetBeans7.0の場合
Java SE 7をIntelliJ IDEA 10.5で試す
IntelliJ IDEA 10.5の場合
• メニューからProject Structureを選択
IntelliJ IDEA 10.5の場合
• デフォルトのJDKを設定
IntelliJ IDEA 10.5の場合
• デフォルトのソースコードのレベルを指定
ちなみに
• スライドのソースコードのスクリーンショットは
  すべてIntelliJ IDEAのものです。
参考文献
参考文献
• 新機能一覧
  – http://openjdk.java.net/projects/jdk7/features/
• JJUGの発表資料
  – http://www.slideshare.net/OracleMiddleJP/new-
    feature-of-java-se-7
• JDK7 javadoc
  – http://download.java.net/jdk7/docs/api/
• try-with-resourcesの仕様
  – http://blogs.oracle.com/darcy/entry/project_coin_up
    dated_arm_spec
質疑応答
• 難しいことは答えられないけどね。

More Related Content

What's hot

JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
Kengo Toda
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
Satoshi Kubo
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
Shinobu Okano
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
Kikuta Go
 

What's hot (20)

Spring3.1概要x di
Spring3.1概要x diSpring3.1概要x di
Spring3.1概要x di
 
Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩Laravel / Lumen 次の一歩
Laravel / Lumen 次の一歩
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
Servlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ksServlet と Future の関わり方 #scala_ks
Servlet と Future の関わり方 #scala_ks
 
OpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasualOpenJDK トラブルシューティング #javacasual
OpenJDK トラブルシューティング #javacasual
 
夏だからJava再入門
夏だからJava再入門夏だからJava再入門
夏だからJava再入門
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnightKafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
Kafka 0.10.0 アップデート、プロダクション100ノードでやってみた #yjdsnight
 
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
[Japanese] Skinny Framework で始める Scala #jjug_ccc #ccc_r24
 
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
The state of sbt 0.13, sbt server, and sbt 1.0 (ScalaMatsuri ver)
 
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapyWebフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
 
Hadoop Summit 2016 San Jose ストリーム処理関連の報告 #streamctjp
Hadoop Summit 2016 San Jose ストリーム処理関連の報告 #streamctjpHadoop Summit 2016 San Jose ストリーム処理関連の報告 #streamctjp
Hadoop Summit 2016 San Jose ストリーム処理関連の報告 #streamctjp
 
play framework 勉強会 in 関西
play framework 勉強会 in 関西play framework 勉強会 in 関西
play framework 勉強会 in 関西
 
Glass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみたGlass fishで作ったアプリをweblogicに移植してみた
Glass fishで作ったアプリをweblogicに移植してみた
 
ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編ISUCON夏期講習2015_2 実践編
ISUCON夏期講習2015_2 実践編
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
スレッドダンプの読み方
スレッドダンプの読み方スレッドダンプの読み方
スレッドダンプの読み方
 
Play frameworkについて
Play frameworkについてPlay frameworkについて
Play frameworkについて
 
Clojureの発表など
Clojureの発表などClojureの発表など
Clojureの発表など
 
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
 

Similar to What is java_se_7

Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
Toshiaki Maki
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
Ryosuke MATSUMOTO
 
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
 

Similar to What is java_se_7 (20)

Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
Play jjug2012spring
Play jjug2012springPlay jjug2012spring
Play jjug2012spring
 
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 発の最新技術トレンドを一気にキャッチアップ-
 
Scalaの現状と課題
Scalaの現状と課題Scalaの現状と課題
Scalaの現状と課題
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
 
2011年javaの旅
2011年javaの旅2011年javaの旅
2011年javaの旅
 
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
 
Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)Java Day Tokyo 2014 まとめ (chen)
Java Day Tokyo 2014 まとめ (chen)
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
 
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
組み込みスクリプト言語Mrubyを利用したwebサーバの機能拡張支援機構
 
Backlogでの Perlのつかいかた
Backlogでの PerlのつかいかたBacklogでの Perlのつかいかた
Backlogでの Perlのつかいかた
 
OPNFVのコンポーネントと調べ方
OPNFVのコンポーネントと調べ方OPNFVのコンポーネントと調べ方
OPNFVのコンポーネントと調べ方
 
とりあえず使えるSBT
とりあえず使えるSBTとりあえず使えるSBT
とりあえず使えるSBT
 
Spring.project
Spring.projectSpring.project
Spring.project
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~Scalaで行うマイグレーション ~Flyway~
Scalaで行うマイグレーション ~Flyway~
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 

Recently uploaded

Recently uploaded (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 

What is java_se_7