夏だからJava再入門

1,882 views

Published on

日本Androidの会 大分支部 第10回勉強会の資料。
そろそろネタ切れか?

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

No Downloads
Views
Total views
1,882
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
16
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

夏だからJava再入門

  1. 1. 夏だからJava再入門 日本Androidの会 大分支部 本田 克己
  2. 2. Androidの開発といえば やっぱりJavaが基本になるので、夏なのでJavaのことをちょっとおさらいして みよと思いました。
  3. 3. お題目Javaの歴史Javaの特徴?Java言語について
  4. 4. Javaの歴史1992年 Javaの前身、Oakというのが開発されたらしい1993年 Webブラウザ Mosaicリリース1994年 Webブラウザ HotJavaが作られたらしい    Oakが商標に引っかかるから、Javaに変更1995年 HotJavaとJavaがお披露目、ベータ版公開1996年 Java1.0リリース1998年 Java Community Process(JCP)設立2001年 DoCoMo 503iでiアプリ2006年 SunがJavaをオープンソース化2008年 Android公開2010年 OracleがSunを買収
  5. 5. JDKのリリース1996年 JDK 1.01997年 JDK 1.11998年 J2SE 1.22000年 J2SE 1.32002年 J2SE 1.42004年 J2SE 5.0 ・・・ 5.0!?2006年 Java SE 62008年 リリースされず2010年 リリースされず
  6. 6. 2011年7月28日Java SE 7 リリース!
  7. 7. Javaのエディション Javaには3つのエディションがあります Java Java Java Micro Edition Standard Edition Enterprise Edition携帯電話などの組込み向け デスクトップ向け サーバ向けiアプリとか、ガラケーの 開発者以外にあまり普及して Java普及の立役者?Javaアプリはコレ。 いなさそう。 お仕事でJavaを始めた人は ここからが多そう。Androidアプリはコレじゃない 昔、Javaアプレットとか少し 流行ったけど、今はあまりみ かけない。
  8. 8. AndroidとJavaの関係Java MEJava SEJava EE
  9. 9. AndroidとJavaの関係Java SEの 一部 Android用の 拡張
  10. 10. で、OracleからGoogleが訴えられています
  11. 11. Javaの特徴
  12. 12. Javaの特徴● オブジェクト指向プログラミング言語● Write Once,Run Anyware(という夢)● 膨大なAPI群● ガベージコレクション
  13. 13. オブジェクト指向プログラミング言語クラスを基本とした静的なオブジェクト指向プログラミング言語です。多重継承はできません。オブジェクトではないプリミティブ型があります。
  14. 14. 静的な言語静的な型付け言語なので、コンパイル時に型のチェックが行われます。Eclipse等の統合開発環境での、強力な入力補完機能が利用できます。実行時に呼び出すメソッドを変えたい時は、リフレクションを使うとなんとかできます。
  15. 15. Write Once,Run Anyware(という夢)Write Once,Run Anywareって昔はよく聞きましたが、最近はあまり耳にしません。Javaが普及してきて、Java自体の宣伝文句を聞かなくなったからか、スクリプト言語が流行って、そんなの当たり前になったからか?WindowsでもMacでもLinuxでも動くプログラムを、作ることもできる。
  16. 16. 膨大なAPI群http://download.oracle.com/javase/7/docs/ から抜粋
  17. 17. ガベージコレクション(GC)使用されていないオブジェクトを、自動的に削除してくれます。でも、不要な参照があると、使用されていると判断されて、メモリリークになります。今のJavaでは世代別GCが多く使われています。(ヒープによって、コピーGCとマーク・アンド・スイープを使い分けている)Java SE6 Update 14以降ではG1GCという新しいGCも提供されています。AndroidのDalvikではマーク・アンド・スイープだけが行われている。
  18. 18. マーク・アンド・スイープだけ???と、今回、資料をまとめていて始めて知りました(汗マーク・アンド・スイープは遅いので、GCがあまり発生しないように、オブジェクトの生成は抑えないといけないですね。
  19. 19. Java言語について
  20. 20. クラス Javaでプログラムを組むときはクラスを作って いきます。● クラスの宣言 class クラス名● 継承 class クラス名 extends 親クラス名 extendsで継承をしていない場合は、デフォル トでObjectクラスを継承します。 class クラス名 → class クラス名 extends Object
  21. 21. オブジェクトクラスからオブジェクトを生成します。オブジェクト名 変数名 = new オブジェクト名();List list = new ArrayList();(Listはインタフェース java.util.ListArrayListはクラス java.util.ArrayList です)
  22. 22. インタフェース 実装のない抽象的なクラス。インタフェース から直接オブジェクトは作れません。● インタフェースの宣言 interface インタフェース名● インタフェースの継承 interface インタフェース名 extends 他のインタフェース名 (クラスは複数のインタフェースを実装できるので、あまり使 うことはありません。というか使ったことがない)● インタフェースの実装 class クラス名 implements インタフェース名
  23. 23. 抽象クラス 部分的に実装されていて、部分的に実装がされ ていない中途半端な抽象クラス。 フレームワークの拡張ポイントとして用意され ていることなどが多い。● 抽象クラスの宣言 abstract class クラス名
  24. 24. プリミティブ型 プリミティブ型はオブジェクトじゃないです● byte(8bit 符号付き整数)● short(16bit 符号付き整数)● int(32bit 符号付き整数)● long(64bit 符号付き整数)● float(32bit 符号付き浮動小数点数)● double(64bit 符号付き浮動小数点数)● char(16bit 符合なしユニコード)● boolean(ブール値 true または false)
  25. 25. ラッパークラスプリミティブ型をオブジェクトとして扱うためにラッパークラスが用意されています。byte→Byte short→Short int→Integerlong→Long float→Float double→Doublechar→Character boolean→Boolean
  26. 26. オートボクシング J2SE 5.0からオートボクシングという機能が提 供されました。 プリミティブ型とラッパクラスを自動的に相互 変換してくれます。● ボクシング プリミティブ型からラッパクラスへ変換● アンボクシング ラッパクラスからプリミティブ型へ変換
  27. 27. オートボクシングの例オートボクシング以前 オートボクシング以降int a = 1; int a = 1;Integer b = new Integer(2); Integer b = new Integer(2);int x = 1 + b.intValue(); int x = a + b;Integer y = new Integer(a Integer y = a + b;+ b.intValue());と、オートボクシングで簡素なコードになりますが、上記コードのような意味不明な型の混在は絶対にやめておきましょう ;-)
  28. 28. 文字列文字列はStringのオブジェクトです。オブジェクトですがリテラルが使えます(オブジェクトをnewしなくても生成される)Stringは変更不能です。文字列の変更をするときは、StringBuilderを使いましょう。(Androidでオブジェクトの生成回数を減らす為にも重要ですね)
  29. 29. 配列Javaの配列はオブジェクト。宣言時のみnewしなくてもリテラルが使える。String[] strs = {“abc”,”def”,”ghi”};宣言時以外はnewしてください。Strs = new String[] {“jk”,”lm”,”no”};Javaでの複数要素の主役の座はListなどのコレクションフレームワークに移っているが、リソース使用量が少ないので、Androidでは配列の方がいいかも。
  30. 30. コレクションフレームワークListやSetやMapといった複数の要素を扱うクラス群データ構造に合わせて、効率のよい実装を選択することができます。J2SE 5.0以降でジェネリクスという機能が提供されました。(ジェネリクスはコレクション以外にも利用できます)
  31. 31. ジェネリクスList list = new ArrayList(); List<String> list = new ArrayList<String>();list.add(“abc”); list.add(“abc”);list.add(new Integer(1)); list.add(1); // コンパイルString abc = エラー(String)list.get(0); String abc = list.get(0);静的な型付けがさらに強力になっています。コンパイル時に型の間違いを検知できて、より安全なコーディングが行えます。
  32. 32. importEclipseとか使っていると、存在感が薄くなってしまっているimportです。他の言語のincludeなどと違って、なくてもどうにかなります。Import java.util.List;Import java.util.ArrayList;List list = new ArrayList;がjava.util.List list = newjava.util.ArrayList();になるだけ。
  33. 33. static importStaticなメソッドやクラス変数をインポートするたとえばMath.abs(10) + Math.abs(-10);がimport static import Math.abs;abs(10) + abs(-10);みたいに書けるので、同じクラスメソッドを大量に呼ぶ場合は、コードが読みやすくなるかも。他の人が読んだ時に混乱するので、多用はしないようがヨサゲです。
  34. 34. 他にも色々ありますが、今回はここで力尽きてしまいました。

×