java可変長引数とは?詳しく解説します!【Java初心者】

新米太郎
新米太郎

皆さんこんにちは新米です。

今回は可変長引数の使い方について解説していきます。

サンプルコードも用意しましたので実際にプログラムを書いて覚えるのが有効です。

 

新米太郎
新米太郎

可変長引数?名前から難しそう汗

新米先生
新米先生

いやいや、そんなことないよ!可変長引数は覚えると便利だからこの機会に習得しよう!

新米太郎
新米太郎

わかりました!がんばりますっっ!

可変長引数とは?

この記事を見ている方は、今まで定義してきたメソッドは引数の数が定義時から決まっていたんではないでしょうか?

しかし、可変長引数を使用することで引数の型が同じであれば、数を可変に扱えることができます。

新米太郎
新米太郎

メソッドの引数の数が決まってないってこと?

新米先生
新米先生

その通り!

引数の型が同じであれば引数の数を任意の数に設定できます。

新米太郎
新米太郎

Javaって便利だね!

可変長引数の値は配列としてメソッドに渡されます。

👇配列が不安な方はこちら

【Java入門】配列の基本的な使い方をマスターしよう!!
こんにちは、新米ブログの新米太郎です! 多くのプログラミング言語の中でも安定の人気ランキング上位Java言語!!本記事では、配列の基本である1次元配列から2次元配列の役割、宣言の仕方、扱い方について紹介していきたいと思います。基礎からしっかり学んでJavaを扱いこなせるように頑張っていきましょう。

可変長引数の宣言ルール

可変長引数を定義する時はいくつかルールがあります。

◇可変長引数のルール

・データ型の後に「…」と記述する。

例)public void method(String...str){}

 

・可変長引数は1つしか使用できません。

例)void method(String...str,int...num){}//コンパイルエラー

 

・可変長引数とデータ型の異なる引数を併用できる。
ただし!可変長引数は最後に置くこと。

例)void method(String str,int...num){}//OK
  void method(int...num,String str){}//コンパイルエラー
新米太郎
新米太郎

引数を複数記述する時は、必ず可変長引数は最後に記述するんだね!

 

・引数を明確に定義したメソッドと可変長引数を使用したメソッドの優先順位

例)void method(String...str){}
  void method(String str){}//明確に定義した方が呼び出される。
新米太郎
新米太郎

オーバーライド時は引数を明示的に定義した

メソッドが呼び出されるってことか~。

実際にコードを書いてみよう

実際にコードを書いて可変長引数に慣れましょう。

[サンプルコード]
class Sample{
    public void method(String str,int... num){
        System.out.println(" ");
        System.out.println(str + "の要素数は" + num.length);
        for(int i : num){
            System.out.println(" 第2引数の値は" + i);
        }
    }
}
public class Main {
    public static void main(String[] args) {
        Sample obj = new Sample();
        int[] ary = {10,20,30};
        obj.method("1回目");
        obj.method("2回目",10);
        obj.method("3回目",10,20);
        obj.method("4回目",ary);
        //obj.method("5回目",null);
        
    }
}

実行結果

1回目の要素数は0

2回目の要素数は1
第2引数の値は10

3回目の要素数は2
第2引数の値は10
第2引数の値は20

4回目の要素数は3
第2引数の値は10
第2引数の値は20
第2引数の値は30

解説

2行目のmethod()メソッドの第二引数で、int型の可変長引数を定義しています。

14行目から17行目でSampleクラスのmethod()メソッドをそれぞれ呼び出しています。

1回目は第二引数を指定していませんが、空の配列が渡されるため問題ありません。

2回目、3回目の呼び出しでは第二引数で複数の値を指定していますが、可変長引数であるため問題なくコンパイルが成功します。

また4回目のように配列ごと渡すことも可能です。

18行目のコメントを外すと実行時エラーが発生します。
引数にnullを指定してもコンパイルは成功しますが、4行目にlengthをnullで呼び出しているため実行時エラーになります。

Exception in thread “main” java.lang.NullPointerException: Cannot read the array length because “<parameter2>” is null
新米太郎
新米太郎

NullPointerExceptionと表示されました

新米先生
新米先生

nullの長さを配列であるかのように取得しようとしたからNullPointerExceptionエラーが表示されたんだよ!

新米太郎
新米太郎

なるほど!配列そのものがnullだとダメなんだね

まとめ

いかがだったでしょうか。

今回は可変長引数について解説しました。

可変長引数って名前は難しそうでも仕組みは単純です。

しかし書かないと覚えませんので、何回も書いてアウトプットしていきましょう。

 

コメント

タイトルとURLをコピーしました