メソッド


※画像が大きすぎるときは,ブラウザの縮小を使って下さい(FireFoxの場合,コントロールキーを押しながら - キーを押すと縮小,コントロールキーを押しながら + キーを押すと拡大です)。

●メソッドの基礎

・メソッドの考え方
 ・メソッドは,一定の処理をひとまとめにしたものである。
 ・いったんメソッドにまとめられた処理は,メソッドを「呼び出す」ことで実行できる。
 ・そのため,メソッドに処理をまとめておくと,いちいちその都度処理を書かなくても,後から何度でもその処理を実行できる。
 ・メソッドには入力としてデータを渡すことができる。メソッドは受け取ったデータを参考に処理を実行できる。
  メソッドに渡されるデータの値を「実際に引き渡す数」という意味で「実引数(じつひきすう, argument)」と呼ぶ。
 ・メソッドは,処理した結果の値を,自分を呼び出した相手に返す事ができる。メソッドが返してくる値を「返値(かえりち,return value)」と呼ぶ。 


・▼FLASHによる解説(右下に「クリック」と表示されたらクリックで次に進めます)
最初から再生

●メソッドの利用例
 ・ここでは,『double 型の実引数を2個受け取って,その平均値を計算して返値として返してくれるメソッド average() 』を
  例にして,メソッドを利用した場合の動作を見てみる。


・▼FLASHによる解説(右下に「クリック」と表示されたらクリックで次に進めます)

最初から再生 隣席の学生どうしで,互いにこのFLASH動画を再生しながら説明してみよう(最初はA君がB君に説明,2回目はB君がA君に説明する,というように)。

これで,メソッドの基本的な考え方,利用の仕方は掴めたのではないだろうか。
次は,自分でメソッドを作る(定義する)方法を修得しよう。


●メソッドの定義方法(ここではstaticという指定のついたメソッドを定義する場合を例にしている)

※なお,メソッドの名前は自由に分かり易い名前を付けて良いが,メソッド名は小文字から始めるのがJavaの世界の常識である。


●メソッド定義の実際
1.int型の値を2個受け取って,その合計値を表示するメソッド add( )。なお,返値は無し。

最初から再生


2. int型の値を2個受け取って,その合計値を返すメソッド add( )。

最初から再生

●メソッドの定義位置

同じクラスの中であるなら, 「メソッドの定義」と「メソッドの利用」 は,順番はどちらが先になっても良い(下図List 1, List 2)。
List 1 (メソッド average() の定義が先に書かれていて,average()を利用している部分が後に書かれている場合)


List 2 (メソッド average() の定義が後に書かれていて,average()を利用している部分が先に書かれている場合)

 


局所変数(メソッド内で使用される変数)

・メソッド内で宣言された変数は(仮引数も含む),局所変数(ローカル変数, local variable)と呼ばれる。
・局所変数の名前は,普通の変数と同様に好きな名前を付けられる。
・そこで,次の List 3 を見て欲しい。先ほどの例に出てきた平均値を計算するメソッド average( ) を定義し,利用している。

List 3


ここで,下図のように,「同じ名前の局所変数を複数箇所で宣言しているが,大丈夫なのだろうか?」という疑問が思い浮かばないだろうか。
つまり,「同じ名前の変数をあちこちで宣言しているけどコンピュータは混乱しないのか?」と。



・実は,メソッド内で宣言された変数はそのメソッドの中だけで有効になるので大丈夫。この点を下図で説明する(クリックで画像が切り替わり説明が進んでいきます) 。

・言ってみれば,メソッド内で宣言された変数はそのメソッド専用の変数になるのである。
 メソッド内で定義された変数が「局所変数」と呼ばれるのはそのためである。
  つまり,メソッド内で宣言された変数はそのメソッドの内部という限られた場所(局所)でのみ有効なのである。

・なお,次の様に同じ名前の局所変数の有効範囲が重なるとエラーになるので注意すること。
List 7


●メソッドオーバロード
 同じくラスの中に,同じ名前を持ったメソッドを作る事ができる。 これをメソッドオーバロード(method overload)と呼ぶ。
 ただし,それらの同じ名前を持つメソッドは仮引数の構成(仮引数の個数やデータ型)が異なっていなければならない
 実際の利用に当たっては,実引数構成によって適切なものが自動的に選ばれて呼び出される。

List 8




●実際のメソッドの例

List 10


List 11



授業内練習問題:次のMaxMethods.javaを完成させよ。
ヒント:引数を3個持つメソッド max ( ) は,引数を2個持つ max( ) を利用すると簡単に定義できる。要は「勝ち抜き戦」である。