参照型の引数の扱い方について知りたい
可変長引数の扱いについて知りたい
こんにちは!エンジニアの中沢です。Javaにはメソッドの中で使用する値を渡すための引数があります。
この記事では、引数を使ってメソッドに値を渡す方法について、基本的な引数渡しの方法から、final修飾子を使う方法、参照渡しの方法や注意点など、Javaの引数について網羅的に解説していきます。
今回はJavaの引数を扱う方法について、初心者でもわかるように解説していますので、ぜひ参考にしてください!
なお、Javaの記事については、こちらにまとめています。
Javaのメソッドの引数とは
メソッドの引数とは、メソッド内の処理で使う値を引き渡す、( )内の値のことです。メソッドに引数を使って値を渡すためには、メソッド名の後の括弧の中に渡したい値を指定します。
引数は次のように使用します。
System.out.println("Hello,World");
この例では、「”Hello,World”」が引数に該当します。
メソッドに引数を使って値を渡す方法
ここでは、メソッドに引数を使って値を渡す方法を解説します。
メソッドの引数に値を渡すには、「メソッド名(引数)」と指定します。メソッドを宣言するときには、引数のデータ型と引数名を記述します。
次のプログラムで確認してみましょう。
public class JavaMethod { public static void main(String[] args) { String name = "SAMURAI"; hello(name); } private static void hello(String name) { System.out.println(name + "さん、こんにちは"); } }
実行結果:
SAMURAIさん、こんにちは
hello(name)と書くことで、helloメソッドに引数の「name」が引き渡されています。
引数のfina修飾子について
final修飾子をつけると、値の代入ができなくなります。
メソッドの引数に「final」をつけると、このメソッド内では引数の値の変更ができなくなります。
次のプログラムで確認してみましょう。
public class JavaMethod { public static void main(String[] args) { String name = "SAMURAI"; hello(name); } private static void hello(final String name) { name = "xxx"; System.out.println(name + "さん、こんにちは"); } }
実行結果:
Exception in thread "main" java.lang.Error: Unresolved compilation problem: final のローカル変数 name には代入できません。ブランクでなければならず、複合代入を使用することはできません
このプログラムでは、final修飾子をつけた引数に値を代入しようとしているため、例外が発生しています。
メソッドの引数に「final」をつけることによって、メソッド内で値の変更ができなくなります。
これによってバグの発生を防止します。
更に、他の人にも引数の値を変更してはいけないことを知らせることができます。
参照型(配列、List)の注意点
ここでは、参照型(配列、List)の値を渡す際の注意点を解説します。
そもそも参照渡しとは
参照型の変数の場合は、final修飾子をつけても値の変更が可能になってしまいます。また、参照型の変数をメソッド内で変更すると、呼び出し元でも値が変わるので注意してください。
次のプログラムで確認してみましょう。
import java.util.ArrayList; import java.util.List; public class JavaMethod { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); System.out.println(list); finalSample(list); System.out.println(list); } public static void finalSample(final List<String> list) { list.set(0, "A"); list.set(1, "B"); list.set(2, "C"); } }
実行結果:
[a, b, c] [A, B, C]
このサンプルコードでは、finalSampleメソッドを呼び出す前と後でListの値が変わっています。
このように参照型の変数を引数に使う場合は、呼び出し元の値が変わるため注意してください。
可変長引数の使い方
ここでは、可変長引数の使い方を解説します。
可変長引数は、引数のデータ型の直後に「…」(ピリオドを3つ)を付けます。そうすると、メソッド内ではその型の引数をいくつでも書けるようになります。
メソッドの最後の引数だけが可変長引数で指定できます。また、可変長引数を指定できるのは1つのメソッドに対して1つの引数だけです。
次のプログラムで確認してみましょう。
public class JavaMethod { public static void main(String[] args) { String name = "SAMURAI"; String greeting = "こんにちは"; hello(name, greeting); } private static void hello(String... str) { System.out.println(str[0] + "さん、" + str[1]); } }
実行結果:
SAMURAIさん、こんにちは
このサンプルコードでは、helloメソッドの引数を可変長で指定しています。
メソッド内では可変長で指定した引数を配列のようにインデックス番号を付けて使用します。
メソッドの使い方総まとめ
この記事では紹介しきれなかったメソッドのいろいろな使い方については、こちらの記事で詳しく解説しているのでぜひ確認してください。
まとめ
今回はメソッドの引数を使う方法を解説しました。final修飾子や可変長引数などいろいろな使い方ができるので、ぜひ活用してくださいね。
もし、メソッドの引数の使い方を忘れてしまったらこの記事を確認してください!