java-beginner.com ブログ

プログラミングを学習するブログ(Javaをメインに)

return文

投稿日:

最終更新日:2016年08月31日

アイキャッチ

こんにちは。「Javaを復習する初心者」です。

今回はreturn文を復習しました。

return文は次の3か所で使うことで出来ます。

  • コンストラクタ内
  • 値を返さない(void型)メソッド内
  • 値を返すメソッド内

初期化ブロックではエラー

コンストラクタで使えるなら、初期化ブロックで使えるのでは?という疑問を持ったのですが、Eclipseで試した結果、エラーが出ました。次のようにreturnを書くと赤い波線が出力されます。

エラー

public class HelloReturn {
    {
        int n = 0;
        return ;
    }
}

上記のプログラムでは「イニシャライザー内から戻ることはできません」というエラーが出力されます。

コンストラクタ内で使う

コンストラクタで値を戻さないリターン文「return ;」を記述することができます。以下の例はコンストラクタ内で値を返さないreturn文を記述しています。

public class HelloReturn {
    HelloReturn () {
        int n = 0;
        return ;
    }
}

上記で「return 1;」とするとエラーになります。「void メソッドは値を戻すことができません」という内容のエラーが出力されます。

voidメソッド内で使う

voidメソッドで値を返さないreturn文を使うことができます。だだし、以下のような書き方をするとエラーになります。

エラー

    private void test() {
        return ;
        int a;
    }

この場合、「int a;」はどのような場合でも実行されません。「到達不能コード」というエラーが出力されます。

以下のような使い方をするとエラーにはなりません。

    private void test(int n) {

        if (n % 2 == 0) {
            return ;
        }

        System.out.println(n);

    }

上記では引数nが奇数のときに「System.out.println(n);」が実行されるため、「到達不能コード」はありません。

void型メソッドで「retun 1;」のように値を返すreturn文を書くとエラーになります。「void メソッドは値を戻すことができません」というエラー内容が出力されます。

返却値があるメソッドで使うときの注意

返却値があるメソッドでは「return ;」は使えません。例えば、int型を返却するメソッド内で「return ;」を記述したとします。この場合、「このメソッドは型 int の結果を戻す必要があります」というエラーが発生します。

finally節がある場合

さて、以下のようにcatch節にreturnを記述したとき、finally節の処理は実行されるのでしょうか。

finally節

    private int test(int a, int b) {

        int c = 0;

        try {
            c = a / b;
        } catch (ArithmeticException e) {
            System.out.println("catch節です。");
            return 0;
        } finally {
            System.out.println("finally節です。");
        }

        return c;
    }

上記を実行すると以下のように出力されます。

結果

catch節です。
finally節です。

finally節が実行されました。