Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Java7再入門講座

Related Books

Free with a 30 day trial from Scribd

See all
  • Be the first to comment

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. ご清聴 ありがとうございました

    Be the first to comment

    Login to see the comments

  • shizone

    Feb. 26, 2012
  • hayakasa

    Feb. 26, 2012
  • TakeshiWatanabe2

    Feb. 27, 2012
  • 8segawa

    Apr. 6, 2012
  • KoutaKimura

    Jul. 10, 2012
  • euno

    Dec. 27, 2012
  • TomoakiTanaka

    Sep. 20, 2013
  • tomoomatsuno

    Oct. 1, 2013
  • msykxxx

    Jun. 19, 2014

Views

Total views

6,623

On Slideshare

0

From embeds

0

Number of embeds

844

Actions

Downloads

25

Shares

0

Comments

0

Likes

9

×