Upload
masafumi-terazono
View
587
Download
0
Embed Size (px)
DESCRIPTION
Javaのクラスとメソッドとフィールドの説明とその使い方の解説
Citation preview
Re:Kayo-System Co.,Ltd.
Twitter @yokmamaNow Loading. Please Wait ...
Javaのクラスとメソッド夜子まま塾 講義2(Androidアプリ開発のための第一歩)
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
自己紹介氏名 :寺園聖文(てらぞの まさふみ)
肩書 :株式会社Re:Kayo-System 代表取締役社長
活動拠点 :神戸近郊~日本→海外行きたい
著書 :「10日でおぼえるAndroidアプリ開発入門教室」著(翔泳社)
「HTML5によるAndroidアプリ開発入門」監修(日経BP)
アプリ :「JUST PLAYER」「Skip Memo」「ふりがなオートマチック」等
好きなもの:アニメ、決して萌えじゃない、見てるけど、あくまで研究の一環
嫌いなもの:とくになし
最近のテーマ:電子工作、運動すること、英語
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
Javaの構成Javaプログラムはクラスとメソッドとフィールドで構成されています。
本資料ではそれぞれの定義の仕方と使い方を学習します。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
“{“と”}”で定義する
package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { System.out.println("Hello World"); }}
HelloMain.java
HelloMainの定義
mainの定義2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
階層定義A{ 定義B{ 定義C{ } 定義B{ } }}
このように定義は階層をもつことができる、
ただし、一番外の階層は1つだけという決まりがある。
定義A{ 定義B{ }}定義C{}
一番上の階層にAとCがあるためこれはNG
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
クラスの定義
クラスとは何か?については後で説明します。まずは定義の仕方を知りましょう。
class <クラス名> {}
classからはじまって名前を書くと、その名前のクラスの定義をすることになります。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
HelloWorldに見るクラス
package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { System.out.println("Hello World"); }}
HelloMain.java
HelloMainはクラスの名前で、{から一番下の}までがHelloMainのクラスの定義だ
ということが分かります。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
クラスの修飾子publicprivateprotected
公開設定
これらは宣言したクラスを、他のクラスから利用できるようにする。あるいはできないといったことを制御するための修飾子で、各クラスに対してひとつだけ付けることができます。また、つけないということも選択できます。つけない状態は”パッケージプライベート”とよばれ同じパッケージ内でしか使えないという状態になります。
すべてのクラスから利用できる
自分のクラス内でしか利用できない
自分と自分を継承したクラス内でしか利用できない
利用とは生成、継承といったことです。継承、パッケージ、内部クラスについては後で説明します。
※但しprivateとprotectedを付けてしまうと誰も生成できなくなってしまうので内部クラスでしか利用できません。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
インスタンスクラスを利用する場合はまずはインスタンス
を生成しなければなりません。
クラスの定義 インスタンス
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
クラスの生成
package ykmjuku.sample.app;
public class Hoge {
}
Hoge.javapackage ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge(); }}
Hoge.java
Hogeというクラスを使うためには一度、そのクラスを new で生成しないといけない。
クラス名 <インスタンス名> = new クラス名();
新しく解説のためにHogeというクラスを作りました。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
コンストラクタ
package ykmjuku.sample.app;
public class Hoge {
}
生成するための処理をコンストラクタで定義することができる。
この例はコンストラクタがないので、デフォルトで引数なしのコンストラクタが自動生成されます。それは表
面上みえません。
package ykmjuku.sample.app;
public class Hoge {
public Hoge(int n){ }}
この例は引数にint nという値をもらうコンストラクタを宣言しました。1つでも定義してしまうと自動生成のコンストラクタはなくなるので注
意です。
<クラス名>(){}
(と)の間に引数を定義できる。いくらでも定義してよい。
複数定義する場合は,(コンマ)区切りで例) Hoge(int a, int b, short c)
Hoge hoge = new Hoge(); エラーになる
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
コンストラクタの修飾子
publicprivateprotected
公開設定
コンストラクタにも修飾子をつけることで利用範囲を設定することができます。
すべてのクラスから利用できる自分のクラス内でしか利用できない自分と自分を継承したクラス内でしか利用できない
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
内部クラス
package ykmjuku.sample.app;
public class Hoge { class MyClass { }}
Classの中にClassを定義することも出来ます。このようにして宣言されたクラスを内部クラス
(インナークラス)と呼びます。特徴はHogeというクラスのインスタンスが存在してはじめて利用できるようになるクラ
スです。そのため次のような呼び出しはエラーになり
ます。(但し後に説明するstaticをつけると可能)
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge();
Hoge.MyClass c = new Hoge.MyClass(); }}
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
パッケージpackage ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { System.out.println("Hello World"); }}
package <パッケージ名>;クラスHelloMainは ykmjuku.sample.app とい
うパッケージに属しています。.(ドット)はフォルダ名の区切りを意味します。
パッケージはプログラムを分けるための仕組みです。Javaのプログラムはパッケージと同じ階層のフォルダにおかなければなりません。またパッケージはプログラムの一番はじめにひとつだけ書くことができます。
もちろん、パッケージを書かないことも可能です。同じパッケージでなければ、同じクラスの名前であっても違うクラスとして認識さ
れます。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
import
同じパッケージ内にあるクラス同士はpublicの属性であれば利用することができますが、そのままでは利用できません。
異なるパッケージに属するクラスはimportをすることで利用することができます。
package ykmjuku.sample.app;
import ykmjuku.sample.app2.Fuga;
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge(); Fuga fuga = new Fuga(); }}
import <クラス名、あるいはパッケージ名>;
新しく解説のためにHogeというクラスを作りました。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
直接指定package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge(); ykmjuku.sample.app2.Fuga fuga = new ykmjuku.sample.app2.Fuga(); }}
importを使う他に、パッケージを直接指定をすることで呼び出すことも出来ます。長くなるので面倒ですが、必要な場合があ
るので覚えておいてください。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
クラスとはJavaにおけるクラスはプログラム(メ
ソッド)の入れ物です。このあとプログラムの定義をどのようにするのか、またそれをどうやって使うの
かについて説明していきます。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
メソッドの定義<戻り値の型> <メソッド名>(<引数...>){ <処理をここに書く> return <戻り値>}
戻り値なしは void を指定します。戻り値がある場合は、戻り値の型(たとえば文字列ならString)などを書きます。
戻り値がvoidつまり必要ない場合は、returnはいりませんが、ある場合はreturnによって返す値をを書きます。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
HelloWorldに見るメソッド
package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { System.out.println("Hello World"); }}
HelloMain.java
mainはメソッドの名前で、”{“から同一階層の”}”までがmainメソッドの定義だとい
うことが分かります。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
メソッドの利用
package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge(); hoge.hello(); }}
package ykmjuku.sample.app;
public class Hoge { int hello(){ System.out.println("Hello World"); return 0; }}
メソッドはクラスのインスタンスを使って呼び出します。
クラスHogeインスタンスを生成Hogeのメソッドhelloを呼び出す
<インスタンス>.<メソッド名>ドット
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
メソッドの修飾子publicprivateprotected
公開設定
メソッドにも修飾子をつけることで利用範囲を設定することができます。
すべてのメソッドから利用できる
自分のクラス内のメソッドからしか利用できない
自分と自分を継承したクラスのメソッド内でしか利用できない
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
staticメソッド
通常メソッドはインスタンスを生成し、インスタンスを用いて呼び出しますが、staticがついたメソッドはインスタンスがなくても利用することができます。
package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge(); hoge.hello(); Hoge.hello2(); }}
package ykmjuku.sample.app;
public class Hoge { void hello(){ System.out.println("Hello World"); } static void hello2(){ System.out.println("Hello World"); }}
<クラス名>.<メソッド名>
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
メソッドとはメソッドは実際のプログラムです。
ただし、大きな1つのプログラムではなく1つ1つが完成された小さなプログラムであり、そ
れらをクラスの中に定義しています。このような書き方はJavaのプログラミングにとっても特徴的でオブジェクト指向とも関係して
います。オブジェクト指向については次の資料で解説します。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
フィールドの定義class <クラス名> { <フィールドの型> <フィールド名>;}
細かく分けられたメソッド同士でデータのやり取りに困るはずです。
このような場合共通のデータとしてフィールドを使うことができます。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
フィールドの使用package ykmjuku.sample.app;
public class Hoge { int mCount; void print(){ System.out.println(mCount); } void countUp(){ mCount = mCount + 1; }}
このように、二つの違うメソッドで共通のデータを扱うことができます。
package ykmjuku.sample.app;
public class HelloMain { public static void main(String[] args) { Hoge hoge = new Hoge(); System.out.println("1回目"); hoge.print(); hoge.countUp(); System.out.println("2回目"); hoge.print(); }}
1回目02回目1
実行結果
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
フィールドの修飾子
publicprivateprotected
公開設定
フィールドにも修飾子をつけることで利用範囲を設定することができます。
全てのクラスから利用できる
自分のクラスからしか利用できない
自分と自分を継承したクラスでしか利用できない
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
特殊なフィールドthispackage ykmjuku.sample.app2;
public class Fuga { public class MyClass { void println(){ this.hello(); } void hello(){ System.out.println("MyClass Hello"); } } void hello(){ System.out.println("Fuga Hello"); } public void func(){ new MyClass().println(); }}
FugaのhelloなのかMyClassのhelloなのかわからない。明示的にthisを付けることでどれを呼ぶのかがわかる。
一方、Fugaのhelloを呼びたい場合は
Fuga.this.hello();
と書くと呼ぶことが出来る。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
フィールドとはフィールドはクラスが保持する変数
のことです。変数にはインスタンスも含まれますし、intやlongといったクラスじゃな
い型の変数も含まれます。
2012年2月21日火曜日
Re:Kayo-System Co.,Ltd.
オブジェクト指向は?続きは夜子まま塾オンライン(無料)にて毎週水曜日夜10:30~11:00(都合によりない場合もあります)
http://bit.ly/wTjjixGoogleID:101190223376062765723
夜子まま塾
上記アカウントをサークルに追加していると、ハングアウトのお誘いが届きます。
是非ご参加ください。
2012年2月21日火曜日