今回はクラスの部品の一つである「メソッド」の説明の後半パートです。前半ではメソッドの概要と戻り値について説明しており、今回は引数について説明します。
もくじ
引数
メソッドを定義もしくは呼び出しする際には「メソッド名」「戻り値の型(もしくはvoid)」「引数」等を記述する必要があります。(シグネチャ)
引数はメソッドの呼び出し側から定義側に値(データ)を渡すことができます。引数には仮引数(parameter)と実引数(argment)があります。
本来、引数には仮引数と実引数と呼びわけがありますが、分けずに引数と呼ぶことが少なくありません。
メソッド定義と仮引数
値を受け取るメソッド定義側の引数(仮引数)は値を受け取る為の変数を定義します。値を受け取るの変数は一つだけでなく複数作成することも可能です。
仮引数を利用して値を受け取る必要がない場合は変数は定義しませんが、()は省くことができません。今までのメソッドはmain()メソッドを除き、ほとんど引数なしのメソッドを利用しています。
引数なしのメソッド定義 | void メソッド名(){ □処理 ; } |
---|---|
記述例 | void open(){ □System.out.println(”表示”); } |
仮引数を利用して値を受け取る際には()内に変数定義を行います。複数の値が必要な場合は,(コンマ)で区切って宣言します。
引数ありのメソッド定義 | void メソッド名(型 変数名, 型 変数名, …..){ □処理 ; } |
---|---|
記述例 | void calc(int number01, int number02){ □int result = number01 * number02; } |
引数ありのメソッド定義 サンプルプログラム
以下のプログラムを「Taiyaki.java※」という名前でworkフォルダ内に保存します。Taiyaki.javaはコンパイルおよび実行は必要ありません。
※すでにTaiyakiクラスを作成している場合は、追加のフィールドとメソッド部分を記述してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
//たい焼きクラスの作成 class Taiyaki{ //たい焼きの中身 String nakami; //たい焼きのサイズ String size = "中"; //追加 たい焼きのg数 int gram ; //たい焼きの中身を確認する void open(){ System.out.println("たい焼きの中身は" + nakami + "です"); } //たい焼きのサイズをreturnする String getSize(){ return size; } //追加 たい焼きの各種データをフィールドに設定 void setData(double g, String n, String s){ gram = g; nakami = n; size = s; } } |
メソッドの呼び出しと実引数
メソッドの呼び出し側ではメソッド定義側に渡す値を記述します。引数ありのメソッド呼び出し時は定義側に従って記述します。複数の値を渡す場合は、渡す値の数のみならず、値の型や型の順序にも気を付ける必要があります。
例えば、定義側が以下のような仮引数となっている場合
1 2 3 4 5 |
void setData(double g, String n, String s){ gram = g; nakami = n; size = s; } |
呼び出し側の実引数が以下のようになっていると、コンパイルエラーとなります。
1 2 |
setData(100); //引数の数が違うためエラー setData("あんこ","小",80); //引数の並びが違うためエラー |
引数ありのメソッド呼び出し サンプルプログラム
Taiyakiクラスを利用する以下のプログラムを「Number28.java」という名前でworkフォルダ内に保存します。保存が完了したら、コマンドプロンプトを起動し、コンパイルおよび実行を行ってみましょう。
1 2 3 4 5 6 7 8 9 |
class Number28{ public static void main(String[] args){ Taiyaki taiyaki = new Taiyaki(); //引数で定義側に値を渡す taiyaki.setData(80,"あんこ","小"); //戻り値のないメソッドを呼び出す taiyaki.open(); } } |
実行例
C:\work>javac Number28.java
C:\work>java Number28
たい焼きの中身はあんこです
※実行例はコンパイルおよび実行までの例を表示しています。
Taiyaki.javaとNumber28.javaの補足
Taiyaki.javaとNumber28.javaのイメージ図は以下の通りです。
このプログラムの流れと内容を補足すると以下のようになります。
- Taiyakiクラスからインスタンスを作成します
- 1で作成したインスタンスを利用してsetNakami()メソッドを呼び出します
- 呼び出し時には引数で3つの「たい焼きの値」を渡します
- 定義側で受け取った値をフィールドに代入します(ローカル変数のままだとsetNakami()メソッド内でしか値を利用できないため)
- open()メソッドを呼び出し、フィールドに代入された中身を表示しています
補足 同一クラス内でのメソッド呼び出し
別クラスからメソッドを呼び出す場合は、基本的にインスタンスを生成してからメソッドを呼び出します。
しかし、同一クラスで定義されたメソッドであれば、メソッド名のみで呼び出すことができます。以下は同一クラスで定義されたメソッドの呼び出し例です。
1 2 3 4 5 6 7 8 |
int calc(double a, double b){ return a * a * b; } void display(){ String message = "結果は" + calc(3,5) + "です"; System.out.println(message); } |
メソッドと引数 復習問題
- 以下の説明で誤りの記述を選んでください。
- 解答群
- メソッド定義側の引数は仮引数と呼ばれる
- メソッド呼び出し側の引数は実引数と呼ばれる
- メソッド定義側と呼び出し側の引数は数や型などを合わせる必要がある
- メソッド呼び出し側の引数には型と変数名を記述する
- メソッドの定義が以下のようになっている場合、呼び出し時の記述で正しいものを選んでください。
void display()
- 解答群
xxx.display(100)
xxx.display(100.0)
xxx.display()
xxx.display(100,50)
- メソッドの定義が以下のようになっている場合、呼び出し時の記述で正しいものを選んでください。
void setData(int a, double b)
- 解答群
xxx.setData(5, 5)
xxx.setData(5, 5.2)
xxx.setData(5.2, 5)
xxx.setData((int)5.2, 5.2)
- お疲れ様でした。
まとめ
- 引数は呼び出し側から定義側に値を渡すことができる
- 定義側の引数を仮引数、呼び出し側の引数を実引数と呼ぶこともある
- 引数で複数の値を渡す場合は「型」「数」「並び」を定義側に合わせる必要がある