こんにちは。「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節が実行されました。