Java7 再入門講座 2012/02/25 第2回 岡山Javaユーザ会岡山Javaユーザ会 吉田貴文(@zephiransas)
その前に...
お気づきだろうか?
JavaOneの  スピーカーが 3人もこの会場にいるということを!
第2回岡山Javaユーザ会   勉強会
JavaZeroDai☆Tokai 2012
Twitterのトレンドにものった!
Diamond Sponsor
以上!
本題へ入ろうぜ
今  Java5使ってる人?
いまJava7を押さえて  おくべき理由
Javaの歴史は進化と革命の    歴史
Java7は進化Java8は革命
来るべきJava8の革命に   備えよ!
JDKリリース状況• Windows & Linux • JDK 1.7.3• Mac OS X • 正式版はまだ • JDK7 Developer Preview
IDE対応状況• Eclipse • 3.7.1 Indigo SR1で対応• IntelliJ • 10.5以降でFull Support
Java7 Main Feature
Java7 Main Feature• Project Coin
Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)
Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)• InvokeDynamic
Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)• InvokeDynamic• Fork/Join framework
Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)• InvokeDynamic• Fork/Join framework
Project Coin
switch構文でのString• 条件部分にStringを使えるようになった• 今までは、数値のみString s = “”;switch(s) {case “hoge”:  doHoge();  break;case “foo”  doFo...
数値表現形式の追加• バイナリ表記 • 2進数表記の追加int a = 0b011001;System.out.println(a);   //25• アンダースコア表記 • _で分割して表記 • 先頭と最後にはNGlong a = 123_4...
例外のマルチキャッチ(1)• 複数の例外を1つのcatchブロックでキャッチclass ExceptionA extends Exception{}class ExceptionB extends Exception{}class MultiC...
例外のマルチキャッチ(2)• 例外に継承関係がある場合は注意• 標準例外の継承関係が曖昧だとハマるclass ExceptionA extends Exception{}class ExceptionB extends ExceptionA{}...
例外の再送(1)• tryブロック中にcatchした例外を再送する• Java6とかだと・・・class ReThrowTest {  public static void test(int a) throws Exception {    t...
例外の再送(2)    • Java7ではclass ReThrowTest {  public static void test(int a) throws ExceptionA, ExceptionB {    try {      if(...
ジェネリクスの<>記法 • <> = ダイヤモンド Map<String, Object> map1 = new HashMap<String, Object>(); Map<String, Map<String, Object>> map2 ...
リソースを含むtry構文(1)• tryブロックでAutoClosableなクラスを使う• finallyでcloseとかが不要になる(自動でclose)InputStream input = newFileInputStream(“hoge.t...
リソースを含むtry構文(2)• Java7だとtry (InputStream input = newFileInputStream(“hoge.txt”);) {  doHoge(input);} catch(Exception e) { ...
NIO.2
NIO.2とは?• ファイル操作用に新規に追加されたAPI• パフォーマンスの改善(高速に動作)• ファイルシステム関連 • FileSystem クラス • HDD等、デバイスの情報を取得• ファイル、ディレクトリ操作関連 • Path イン...
押さえておくべきは PathsとFiles
FileSystemクラス• 取得方法FileSystem fs = FileSystems.getDefault();• getFileStores • ストレージの容量などが取得できる• getPath • Pathを生成できる
Pathsクラス• 基本はgetPath path1 = Paths.get(“/User/hoge/fuga.txt”);Path path2 = Paths.get(“/User/hoge”, “fuga.txt”);• java.io.F...
Filesクラス(1)• ファイル作成Files.createFile(path1);• ファイル削除Files.delete(path);• ファイルコピーFiles.copy(path1, path2);• ファイル移動Files.move...
Filesクラス(2)• 存在チェックFiles.exists(path);• テンポラリファイル作成Files.createTempFile(“prefix”,”suffix”);• シンボリックリンクFiles.createSymbolic...
Filesクラス(3)• テキスト読み書きList<String> data =    Files.readAllLines(path1, StandardCharsets.UTF8);Files.write(path2, data, Stan...
Filesクラス(4)• 1行づつでもtry-with-resourceとかで簡単try(BufferedReader reader =  Files.newBufferedReader(path,StandardCharsets.UTF_8)...
非同期チャネルAPI• 非同期アクセスを実現するAPI群 • AsynchronusSocketChannel • AsynchronusServerSocketChannel • AsynchronusFileChannel • Asynch...
Fork/Join Framework• 大きなタスクを小さい粒度に分割• 小さなタスクを並列で処理 • マルチコア対応• 櫻庭さんのIT Proの記事を参考に • http://itpro.nikkeibp.co.jp/article/   ...
まとめ• Project Coinで記述の幅が広がった • 例外周りの処理が、便利に • ダイヤモンド、(゚д゚)ウマー• NIO.2でファイル操作が便利&高速 • グッバイ、Commons IO• Java7は、早めに導入しておくが吉 • ど...
ご清聴 ありがとうございました
Java7再入門講座
Java7再入門講座
Java7再入門講座
Upcoming SlideShare
Loading in …5
×

Java7再入門講座

6,099 views

Published on

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,099
On SlideShare
0
From Embeds
0
Number of Embeds
789
Actions
Shares
0
Downloads
24
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Java7再入門講座

    1. 1. Java7 再入門講座 2012/02/25 第2回 岡山Javaユーザ会岡山Javaユーザ会 吉田貴文(@zephiransas)
    2. 2. その前に...
    3. 3. お気づきだろうか?
    4. 4. JavaOneの スピーカーが 3人もこの会場にいるということを!
    5. 5. 第2回岡山Javaユーザ会 勉強会
    6. 6. JavaZeroDai☆Tokai 2012
    7. 7. Twitterのトレンドにものった!
    8. 8. Diamond Sponsor
    9. 9. 以上!
    10. 10. 本題へ入ろうぜ
    11. 11. 今 Java5使ってる人?
    12. 12. いまJava7を押さえて おくべき理由
    13. 13. Javaの歴史は進化と革命の 歴史
    14. 14. Java7は進化Java8は革命
    15. 15. 来るべきJava8の革命に 備えよ!
    16. 16. JDKリリース状況• Windows & Linux • JDK 1.7.3• Mac OS X • 正式版はまだ • JDK7 Developer Preview
    17. 17. IDE対応状況• Eclipse • 3.7.1 Indigo SR1で対応• IntelliJ • 10.5以降でFull Support
    18. 18. Java7 Main Feature
    19. 19. Java7 Main Feature• Project Coin
    20. 20. Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)
    21. 21. Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)• InvokeDynamic
    22. 22. Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)• InvokeDynamic• Fork/Join framework
    23. 23. Java7 Main Feature• Project Coin• NIO.2 (More New APIs for Java Platform)• InvokeDynamic• Fork/Join framework
    24. 24. Project Coin
    25. 25. switch構文でのString• 条件部分にStringを使えるようになった• 今までは、数値のみString s = “”;switch(s) {case “hoge”: doHoge(); break;case “foo” doFoo(); break;default: doDefault();}
    26. 26. 数値表現形式の追加• バイナリ表記 • 2進数表記の追加int a = 0b011001;System.out.println(a); //25• アンダースコア表記 • _で分割して表記 • 先頭と最後にはNGlong a = 123_456_789;System.out.println(a); //123456789long b = 0b011_001; //バイナリ表記との合わせ技System.out.println(b); //25int c = _123_456 //コンパイルエラー
    27. 27. 例外のマルチキャッチ(1)• 複数の例外を1つのcatchブロックでキャッチclass ExceptionA extends Exception{}class ExceptionB extends Exception{}class MultiCatch { public static void test(int a) { try { if(a == 1) { throw new ExceptionA(); } else { throw new ExceptionB(); } } catch(ExceptionA | ExceptionB ex) { System.out.println(ex.getClass()); } }}
    28. 28. 例外のマルチキャッチ(2)• 例外に継承関係がある場合は注意• 標準例外の継承関係が曖昧だとハマるclass ExceptionA extends Exception{}class ExceptionB extends ExceptionA{}class MultiCatch { public static void test(int a) { try { if(a == 1) { throw new ExceptionA(); } else { throw new ExceptionB(); } } catch(ExceptionB | ExceptionA ex) { //コンパイルエラー System.out.println(ex.getClass()); } }}
    29. 29. 例外の再送(1)• tryブロック中にcatchした例外を再送する• Java6とかだと・・・class ReThrowTest { public static void test(int a) throws Exception { try { if(a == 1) { throws ExceptionA, ExceptionB throw new ExceptionA(); とか書けない! } else { throw new ExceptionB(); } } catch(Exception ex) { System.out.println(ex.getClass()); throw ex; } }}
    30. 30. 例外の再送(2) • Java7ではclass ReThrowTest { public static void test(int a) throws ExceptionA, ExceptionB { try { if(a == 1) { メソッドが本来throwsしたい throw new ExceptionA(); 例外を記述できる } else { throw new ExceptionB(); } } catch(Exception ex) { System.out.println(ex.getClass()); throw ex; } }}
    31. 31. ジェネリクスの<>記法 • <> = ダイヤモンド Map<String, Object> map1 = new HashMap<String, Object>(); Map<String, Map<String, Object>> map2 = new HashMap<String, Map<String, Object>> • Mapとかでネストすると、右辺が冗長!Map<String, Object> map1 = new HashMap<>();Map<String, Map<String, Object>> map2 = new HashMap<>();
    32. 32. リソースを含むtry構文(1)• tryブロックでAutoClosableなクラスを使う• finallyでcloseとかが不要になる(自動でclose)InputStream input = newFileInputStream(“hoge.txt”);try { doHoge(input);} catch(Exception e) { System.out.println(e);} finally { input.close();} • finallyでcloseしてた
    33. 33. リソースを含むtry構文(2)• Java7だとtry (InputStream input = newFileInputStream(“hoge.txt”);) { doHoge(input);} catch(Exception e) { System.out.println(e);} • tryブロックを抜けたタイミングで InputStream#closeが自動で呼び出される • closeで発生した例外もcatchできる
    34. 34. NIO.2
    35. 35. NIO.2とは?• ファイル操作用に新規に追加されたAPI• パフォーマンスの改善(高速に動作)• ファイルシステム関連 • FileSystem クラス • HDD等、デバイスの情報を取得• ファイル、ディレクトリ操作関連 • Path インターフェース • PathsクラスとFilesクラス• もう、Commons IOとか使わなくてもいい!
    36. 36. 押さえておくべきは PathsとFiles
    37. 37. FileSystemクラス• 取得方法FileSystem fs = FileSystems.getDefault();• getFileStores • ストレージの容量などが取得できる• getPath • Pathを生成できる
    38. 38. Pathsクラス• 基本はgetPath path1 = Paths.get(“/User/hoge/fuga.txt”);Path path2 = Paths.get(“/User/hoge”, “fuga.txt”);• java.io.Fileからも生成できるFile file = new File(“/User/hoge/fuga.txt”);Path path = file.toPath();• ここで生成したPathをFilesで使う
    39. 39. Filesクラス(1)• ファイル作成Files.createFile(path1);• ファイル削除Files.delete(path);• ファイルコピーFiles.copy(path1, path2);• ファイル移動Files.move(path1, path2);
    40. 40. Filesクラス(2)• 存在チェックFiles.exists(path);• テンポラリファイル作成Files.createTempFile(“prefix”,”suffix”);• シンボリックリンクFiles.createSymbolicLink(path1, path2);
    41. 41. Filesクラス(3)• テキスト読み書きList<String> data = Files.readAllLines(path1, StandardCharsets.UTF8);Files.write(path2, data, StandardCharsets.UTF8);• バイナリ読み書きbyte[] data = Files.readAllBytes(path1);Files.write(path2, data);
    42. 42. Filesクラス(4)• 1行づつでもtry-with-resourceとかで簡単try(BufferedReader reader = Files.newBufferedReader(path,StandardCharsets.UTF_8)) { String line; while((line = reader.readLine()) != null) { System.out.println(line); }} catch(Exception e) { System.out.println(e);}
    43. 43. 非同期チャネルAPI• 非同期アクセスを実現するAPI群 • AsynchronusSocketChannel • AsynchronusServerSocketChannel • AsynchronusFileChannel • AsynchronusDatagramChannel
    44. 44. Fork/Join Framework• 大きなタスクを小さい粒度に分割• 小さなタスクを並列で処理 • マルチコア対応• 櫻庭さんのIT Proの記事を参考に • http://itpro.nikkeibp.co.jp/article/ COLUMN/20110627/361738/
    45. 45. まとめ• Project Coinで記述の幅が広がった • 例外周りの処理が、便利に • ダイヤモンド、(゚д゚)ウマー• NIO.2でファイル操作が便利&高速 • グッバイ、Commons IO• Java7は、早めに導入しておくが吉 • どうしても無理・・・?
    46. 46. ご清聴 ありがとうございました

    ×