SlideShare a Scribd company logo
夏だからJava再入門
   日本Androidの会 大分支部
        本田 克己
Androidの開発といえば




  やっぱりJavaが基本になるので、
夏なのでJavaのことをちょっとおさらいして
      みよと思いました。
お題目
Javaの歴史
Javaの特徴?
Java言語について
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を買収
JDKのリリース
1996年 JDK 1.0
1997年 JDK 1.1
1998年 J2SE 1.2
2000年 J2SE 1.3
2002年 J2SE 1.4
2004年 J2SE 5.0 ・・・ 5.0!?
2006年 Java SE 6
2008年 リリースされず
2010年 リリースされず
2011年7月28日
Java SE 7 リリース!
Javaのエディション
  Javaには3つのエディションがあります


        Java                  Java               Java
    Micro Edition       Standard Edition   Enterprise Edition




携帯電話などの組込み向け          デスクトップ向け             サーバ向け
iアプリとか、ガラケーの          開発者以外にあまり普及して        Java普及の立役者?
Javaアプリはコレ。           いなさそう。               お仕事でJavaを始めた人は
                                           ここからが多そう。
Androidアプリはコレじゃない     昔、Javaアプレットとか少し
                      流行ったけど、今はあまりみ
                      かけない。
AndroidとJavaの関係

Java ME




Java SE




Java EE
AndroidとJavaの関係




Java SEの
   一部           Android用の
                   拡張
で、OracleからGoogleが訴えられています
Javaの特徴
Javaの特徴
●   オブジェクト指向プログラミング言語
●   Write Once,Run Anyware(という夢)
●   膨大なAPI群
●   ガベージコレクション
オブジェクト指向プログラミング言語
クラスを基本とした静的なオブジェクト指向プ
ログラミング言語です。

多重継承はできません。



オブジェクトではないプリミティブ型がありま
す。
静的な言語
静的な型付け言語なので、コンパイル時に型
のチェックが行われます。

Eclipse等の統合開発環境での、強力な入力補
完機能が利用できます。

実行時に呼び出すメソッドを変えたい時は、リ
フレクションを使うとなんとかできます。
Write Once,Run Anyware(という夢)
Write Once,Run Anywareって昔はよく聞きました
が、最近はあまり耳にしません。

Javaが普及してきて、Java自体の宣伝文句を聞
かなくなったからか、スクリプト言語が流行っ
て、そんなの当たり前になったからか?

WindowsでもMacでもLinuxでも動くプログラム
を、作ることもできる。
膨大なAPI群




http://download.oracle.com/javase/7/docs/ から抜粋
ガベージコレクション(GC)
使用されていないオブジェクトを、自動的に削除して
くれます。でも、不要な参照があると、使用されてい
ると判断されて、メモリリークになります。


今のJavaでは世代別GCが多く使われています。
(ヒープによって、コピーGCとマーク・アンド・ス
イープを使い分けている)
Java SE6 Update 14以降ではG1GCという新しいGCも提
供されています。


AndroidのDalvikではマーク・アンド・スイープだけ
が行われている。
マーク・アンド・スイープだけ???
と、今回、資料をまとめていて始めて知りました
(汗

マーク・アンド・スイープは遅いので、GCが
あまり発生しないように、オブジェクトの生成
は抑えないといけないですね。
Java言語について
クラス
    Javaでプログラムを組むときはクラスを作って
    いきます。
●   クラスの宣言
    class クラス名
●   継承
    class クラス名 extends 親クラス名
    extendsで継承をしていない場合は、デフォル
    トでObjectクラスを継承します。
    class クラス名 → class クラス名 extends Object
オブジェクト
クラスからオブジェクトを生成します。
オブジェクト名 変数名 = new オブジェクト名();
List list = new ArrayList();
(Listはインタフェース java.util.List
ArrayListはクラス java.util.ArrayList です)
インタフェース
    実装のない抽象的なクラス。インタフェース
    から直接オブジェクトは作れません。
●   インタフェースの宣言
    interface インタフェース名
●   インタフェースの継承
    interface インタフェース名 extends 他のインタフェース名
    (クラスは複数のインタフェースを実装できるので、あまり使
    うことはありません。というか使ったことがない)
●   インタフェースの実装
    class クラス名 implements インタフェース名
抽象クラス
    部分的に実装されていて、部分的に実装がされ
    ていない中途半端な抽象クラス。
    フレームワークの拡張ポイントとして用意され
    ていることなどが多い。
●   抽象クラスの宣言
    abstract class クラス名
プリミティブ型
    プリミティブ型はオブジェクトじゃないです
●   byte(8bit 符号付き整数)
●   short(16bit 符号付き整数)
●   int(32bit 符号付き整数)
●   long(64bit 符号付き整数)
●   float(32bit 符号付き浮動小数点数)
●   double(64bit 符号付き浮動小数点数)
●   char(16bit 符合なしユニコード)
●   boolean(ブール値 true または false)
ラッパークラス
プリミティブ型をオブジェクトとして扱うため
にラッパークラスが用意されています。

byte→Byte    short→Short int→Integer
long→Long    float→Float double→Double
char→Character    boolean→Boolean
オートボクシング
    J2SE 5.0からオートボクシングという機能が提
    供されました。
    プリミティブ型とラッパクラスを自動的に相互
    変換してくれます。
●   ボクシング
    プリミティブ型からラッパクラスへ変換
●   アンボクシング
    ラッパクラスからプリミティブ型へ変換
オートボクシングの例
オートボクシング以前                    オートボクシング以降


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());

と、オートボクシングで簡素なコードになりますが、上記コードのような意味不明な
型の混在は絶対にやめておきましょう ;-)
文字列
文字列はStringのオブジェクトです。
オブジェクトですがリテラルが使えます
(オブジェクトをnewしなくても生成される)
Stringは変更不能です。
文字列の変更をするときは、StringBuilderを使
いましょう。
(Androidでオブジェクトの生成回数を減らす為
にも重要ですね)
配列
Javaの配列はオブジェクト。
宣言時のみnewしなくてもリテラルが使える。
String[] strs = {“abc”,”def”,”ghi”};
宣言時以外はnewしてください。
Strs = new String[] {“jk”,”lm”,”no”};

Javaでの複数要素の主役の座はListなどのコレ
クションフレームワークに移っているが、リソー
ス使用量が少ないので、Androidでは配列の方
がいいかも。
コレクションフレームワーク
ListやSetやMapといった複数の要素を扱うクラ
ス群
データ構造に合わせて、効率のよい実装を選択
することができます。
J2SE 5.0以降でジェネリクスという機能が提供
されました。
(ジェネリクスはコレクション以外にも利用で
きます)
ジェネリクス
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);


静的な型付けがさらに強力になっています。
コンパイル時に型の間違いを検知できて、より安全なコーディングが行えます。
import
Eclipseとか使っていると、存在感が薄くなってし
まっているimportです。
他の言語のincludeなどと違って、なくてもどう
にかなります。
Import java.util.List;
Import java.util.ArrayList;
List list = new ArrayList;
が
java.util.List list = new
java.util.ArrayList();
になるだけ。
static import
Staticなメソッドやクラス変数をインポートする
たとえば
Math.abs(10) + Math.abs(-10);
が
import static import Math.abs;
abs(10) + abs(-10);
みたいに書けるので、同じクラスメソッドを大
量に呼ぶ場合は、コードが読みやすくなるか
も。
他の人が読んだ時に混乱するので、多用はしな
いようがヨサゲです。
他にも色々ありますが、
今回はここで力尽きてしまいました。

More Related Content

PPTX
2歩目 プレゼン資料 初歩から始めるjava勉強会
PPTX
LLoT2016 Java Update
PPTX
Scala勉強会 初心者向けハンズオン前編
PDF
社内Java8勉強会 ラムダ式とストリームAPI
PDF
rpscala35-scala2.9.0
PDF
Scalaで萌える関数型プログラミング[完全版]
PDF
Javaクラスファイルの読み方
PDF
磯野ー!関数型言語やろうぜー!
2歩目 プレゼン資料 初歩から始めるjava勉強会
LLoT2016 Java Update
Scala勉強会 初心者向けハンズオン前編
社内Java8勉強会 ラムダ式とストリームAPI
rpscala35-scala2.9.0
Scalaで萌える関数型プログラミング[完全版]
Javaクラスファイルの読み方
磯野ー!関数型言語やろうぜー!

What's hot (20)

PPT
Rpscala2011 0601
PDF
JVMの中身を可視化してみた
PDF
ATN No.2 Scala事始め
PDF
Scala2.8への移行
PDF
Phantom Type in Scala
PDF
What is java_se_7
PDF
PDF
BOF1-Scala02.pdf
PDF
Scalaノススメ
PDF
Lombok ハンズオン
PDF
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
PDF
15分でざっくり分かるScala入門
PDF
JavaScript入門-基礎編
PDF
Scalaで萌える関数型プログラミング[1.1.RC1]
PPTX
Scalaのimplicit、カリー化
PDF
たのしい関数型
PDF
197x 20090704 Scalaで並行プログラミング
PPTX
Sns suite presentation
PDF
Scalaで型クラス入門
PDF
ScalaMatsuri 2016
Rpscala2011 0601
JVMの中身を可視化してみた
ATN No.2 Scala事始め
Scala2.8への移行
Phantom Type in Scala
What is java_se_7
BOF1-Scala02.pdf
Scalaノススメ
Lombok ハンズオン
JJUG CCC 2013 Fall「JVMコードリーディング入門-JVMのOS抽象化レイヤーについて-」
15分でざっくり分かるScala入門
JavaScript入門-基礎編
Scalaで萌える関数型プログラミング[1.1.RC1]
Scalaのimplicit、カリー化
たのしい関数型
197x 20090704 Scalaで並行プログラミング
Sns suite presentation
Scalaで型クラス入門
ScalaMatsuri 2016
Ad

Viewers also liked (20)

PDF
Overview of Scala ~ Hacker Tackle
PDF
Java の Collection 関連について整理してみました
PDF
App codeでリファクタリング
PDF
いま、できるアジャイル
KEY
テストコードのリファクタリング
PDF
レガシーボディー改善のためのパタン・ランゲージ 〜 運動や食事からはじめる人生のリファクタリング
PDF
今日からはじめるリファクタリング
PDF
JJUG CCC 2014 fall 「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
PDF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
PDF
TDD のこころ @ OSH2014
PDF
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
PDF
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
PDF
プログラムの処方箋~健康なコードと病んだコード
PDF
【こっそり始める】Javaプログラマコーディングマイグレーション
PDF
Junitを使ったjavaのテスト入門
PDF
2015/11/15 Javaでwebアプリケーション入門
PDF
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
PPTX
Javaにおけるネイティブコード連携の各種手法の紹介
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
PDF
「TDDはじめて物語」 #tddbc
Overview of Scala ~ Hacker Tackle
Java の Collection 関連について整理してみました
App codeでリファクタリング
いま、できるアジャイル
テストコードのリファクタリング
レガシーボディー改善のためのパタン・ランゲージ 〜 運動や食事からはじめる人生のリファクタリング
今日からはじめるリファクタリング
JJUG CCC 2014 fall 「私がTDD出来ないのはどう考えてもお前らが悪い!」~エンタープライズJava開発でのTDD適用の勘所~
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
TDD のこころ @ OSH2014
FOSE2010 ミニチュートリアル 「データマイニング技術を応用したソフトウェア構築・保守支援」
TDDを実践してわかったTDDつまづくあるあると自分なりの乗り越え方まとめ
プログラムの処方箋~健康なコードと病んだコード
【こっそり始める】Javaプログラマコーディングマイグレーション
Junitを使ったjavaのテスト入門
2015/11/15 Javaでwebアプリケーション入門
ほんとうに便利だった業務で使えるJava SE8新機能(JJUG CCC 2015 Spring)
Javaにおけるネイティブコード連携の各種手法の紹介
Java開発の強力な相棒として今すぐ使えるGroovy
「TDDはじめて物語」 #tddbc
Ad

Similar to 夏だからJava再入門 (20)

PDF
Web技術勉強会 20110723
KEY
GroovyなAndroidテスト #atest_hack
PDF
Java x Groovy: improve your java development life
PDF
Ruby on Rails 入門
PDF
JavaのGenericsとは?
PDF
Google Gears データベースの基礎
PPT
ジェネリクスの基礎と クラス設計への応用
PDF
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
PDF
Equality in Scala (ScalaMatsuri 2020)
PDF
Javascripでオブジェクト指向
PDF
Functional JavaScript with Lo-Dash.js
PDF
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
PDF
Trait in scala
PDF
第三回ありえる社内勉強会 「いわががのLombok」
PDF
JavaScript超入門 基礎
PDF
ScalaでAndroidアプリ開発
PPTX
Go guide for Java programmer
PPT
20090121 J QueryからはじめるJava Script~初級編~
PPT
Eclipse を使った java 開発 111126 杉浦
PDF
Java SE 再入門
Web技術勉強会 20110723
GroovyなAndroidテスト #atest_hack
Java x Groovy: improve your java development life
Ruby on Rails 入門
JavaのGenericsとは?
Google Gears データベースの基礎
ジェネリクスの基礎と クラス設計への応用
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Equality in Scala (ScalaMatsuri 2020)
Javascripでオブジェクト指向
Functional JavaScript with Lo-Dash.js
JavaScriptCore.framework の普通な使い方 #cocoa_kansai
Trait in scala
第三回ありえる社内勉強会 「いわががのLombok」
JavaScript超入門 基礎
ScalaでAndroidアプリ開発
Go guide for Java programmer
20090121 J QueryからはじめるJava Script~初級編~
Eclipse を使った java 開発 111126 杉浦
Java SE 再入門

More from Katsumi Honda (18)

PDF
Ionicアプリのデータ管理
PDF
Angularで新サービス作って学んだこととか
PDF
1粒で6度おいしい(かもしれない) Ionicのススメ
PPTX
Meteor intro-2015-rev1- 日本語バージョン
PDF
はじめてのMeteor
PDF
Mobile Backend Starterを使ってサクサクアプリ開発
PDF
ヨーマンおじさんと戯れる会
PDF
イマドキのWebアプリの作り方
PDF
はじめてのPython
PDF
はじめてのPython - 開発環境の準備 for Mac
PDF
はじめてのPython - 開発環境の準備 for Windows
PDF
冬だからAndroid再入門
PDF
Osc2012 appinventor のその後
PDF
秋だからEclipse再入門
ODP
OSC2011 Androidハンズオン
ODP
雲から機器へ伝達させる為の枠組み
ODP
激安Androidタブレットを買ってみた
ODP
はじめてのAndroid開発
Ionicアプリのデータ管理
Angularで新サービス作って学んだこととか
1粒で6度おいしい(かもしれない) Ionicのススメ
Meteor intro-2015-rev1- 日本語バージョン
はじめてのMeteor
Mobile Backend Starterを使ってサクサクアプリ開発
ヨーマンおじさんと戯れる会
イマドキのWebアプリの作り方
はじめてのPython
はじめてのPython - 開発環境の準備 for Mac
はじめてのPython - 開発環境の準備 for Windows
冬だからAndroid再入門
Osc2012 appinventor のその後
秋だからEclipse再入門
OSC2011 Androidハンズオン
雲から機器へ伝達させる為の枠組み
激安Androidタブレットを買ってみた
はじめてのAndroid開発

夏だからJava再入門