※本サイトで紹介している商品・サービス等の外部リンクには、アフィリエイト広告が含まれる場合があります。

こんにちは。こんぶです。
今日は、「引数や戻り値に配列を使用したメソッド」と「コマンドライン引数」について学んでいきましょう!
私の自己紹介等は、こちらからどうぞ。
また、Javaの学習を最初から進めていきたい方は、Java-1から見てみてくださいね。
引数に配列を使用する
メソッドの引数には、基本型変数(int型など)以外にも配列を使用することができます。
早速ですが、実際のコードを見た方が分かりやすいと思うので、次の例を見てみましょう。

この例では、まずint[]型配列「numbers」を宣言し、その配列を引数として渡してprintNumberメソッドを呼び出しています。メソッドの定義ではint[]型配列arrayを引数として設定した「printNumber」メソッドを定義し、「配列の要素:」と画面に表示した後、呼び出し元のメソッドから受け取った配列の要素を1つずつ画面に表示していきます。
ちなみに、このコードを実行すると次のように画面に表示されます。

このように、メソッドの引数に配列を使用することができるんですね。
基本型変数と配列型変数を引数とする場合の違い
基本型変数を引数として指定した場合には、メソッドを呼び出した時点で変数に代入されている値をコピーして渡しています。このように引数として値そのものを渡すことを「値渡し」といいます。
一方で、配列型変数を引数として指定した場合は、配列の先頭要素のアドレス情報を渡しています。配列の内容をコピーして渡しているわけではなく、配列のアドレスをコピーして渡しているということですね。このように引数としてアドレスを渡すことを「参照渡し」といいます。(厳密には「参照の値渡し」といいます)
「値渡し」の場合は、呼び出し先で引数の内容を書き換えたとしても、呼び出し元の変数は変化しません。
一方で「参照渡し」の場合は、呼び出し元も呼び出し先も同じアドレスを指していることになるため、呼び出し先で内容を書き換えてしまうと呼び出し元の内容も変更されます。
戻り値に配列を使用する
メソッドの戻り値にも配列を使用することができます。
こちらも実際のコード例を見てみましょう。

この例では、メソッドの定義(下のブロック)で、int型変数numberを引数として設定したcreateArrayメソッドを定義しています。int[]型配列newArray(要素数は、引数として受け取ったnumberである5)を作成し、配列を回して各要素に添え字と同じ数字を格納し、戻り値としてint[]型配列newArrayを返すメソッドです。
メソッドの呼び出しでは、引数として5を渡してcreateArrayメソッドを呼び出し、戻り値(createArrayメソッドで作成された配列)をint[]型配列「array」で受け取ります。そして、「配列の要素:」と画面に表示した後、受け取った配列の要素を1つずつ画面に表示していきます。
ちなみに、このコードを実行すると次のように画面に表示されます。

このように、メソッドの戻り値にも配列を使用することができるんですね。
この場合も、配列そのものを戻しているのではなく、配列の先頭要素のアドレス情報を戻しています。
戻り値として配列を使用することで、複数の値を返すことも可能になりますね。
コマンドライン引数
引数の1種として「コマンドライン引数」も紹介しておきます。
Javaプログラムの起動時に追加情報を渡すことができるのですが、その追加情報のことを「コマンドライン引数」といいます。
通常、Javaプログラムを起動させる場合は「java プログラム名」のように指定するのですが、コマンドライン引数を利用してJavaプログラムを起動させる場合には「java プログラム名 引数リスト」のように指定します。引数が複数ある場合は半角スペースで区切って入力します。
コマンドライン引数は、JVMによって配列に変換され、mainメソッド起動時に渡されます。
今回のまとめ
★メソッドの引数や戻り値に配列を使用することができる
★基本型変数を引数として指定した場合には、メソッドを呼び出した時点で変数に代入されている値をコピーして渡している
★配列型変数を引数として指定した場合は、配列の先頭要素のアドレス情報を渡している
★コマンドライン引数を利用してJavaプログラムを起動させる場合には「java プログラム名 引数リスト」のように指定する(引数が複数ある場合は半角スペースで区切って入力)
・値渡し:引数として値そのものを渡すこと
・参照渡し(参照の値渡し):引数としてアドレスを渡すこと
・コマンドライン引数:Javaプログラムの起動時に渡す追加情報
次回は、「複数クラスに分割したプログラム」について説明していこうと思います。
今回の内容のチャレンジ問題はこちらです→チャレンジ問題【Java-30】~メソッド⑤引数や戻り値に配列を使用&コマンドライン引数~
次の内容に進む方はこちらです→【Java-31】複数クラスに分割したプログラム
それでは、こんぶはじゃ~
コメント