こんにちは!フリーライターの中井です。
Javaにはメソッドの値を返す戻り値を使うためのreturn文があります。この記事では、
- メソッドの戻り値とは
- return文とは
- return文で戻り値を返す方法
という基本的な内容から、複数の戻り値を返す方法などの応用的な使い方に関しても解説していきます。今回はメソッドの戻り値を使うreturn文について、わかりやすく解説します!
なお、Javaの記事については、こちらにまとめています。
メソッドの戻り値とは
メソッドの戻り値とは、メソッドの呼び出し元に返す値のことをいいます。メソッドの戻り値がない場合は、次のようにメソッドの中ですべての処理を行うプログラムになります。
サンプルプログラム:
public class Main { public static void main(String[] args) { num(5, 2); } private static void num(int num1, int num2) { int addAns = num1 + num2; System.out.println("答えは" + addAns+ "です。"); } }
実行結果:
答えは7です。
return文とは
return文は、そこで処理を終了し、呼び出し元に処理を戻します。通常、メソッドは最後まで処理を行うと呼び出し元に処理が戻るため、条件によって途中で処理を中断する場合などに使われます。次のサンプルプログラムを見てください。
サンプルプログラム:
public class Main { public static void main(String[] args) { num(0, 2); } private static void num(int num1, int num2) { if (num1 == 0) { System.out.println("呼び出し元に戻ります。"); return; } int addAns = num1 + num2; System.out.println("答えは" + addAns + "です。"); } }
実行結果:
呼び出し元に戻ります。
上記のプログラムでは、numメソッドの引数num1が0の場合に、return文が実行されます。return文が実行された後は、それ以降の処理が行われていないことがわかります。
return文で戻り値を返す方法
return文を使って、呼び出し元に戻り値を返すことができます。戻り値を返すメソッドは次のように記述します。
書き方:
修飾子 戻り値の型 メソッド名(){ // 処理 return 戻り値; }
呼び出し元は次のように戻り値を使用することができます。
書き方:
public static void main(String args[]) { 戻り値の型 変数 = メソッド名(); }
この呼び出し元のメソッドのように戻り値を返さない場合には、戻り値の型にvoidを指定します。voidは戻り値を返さないことを意味し、そのメソッド内ではreturn文を使う必要がありません。
基本的な使い方
最初に紹介したプログラムを、戻り値のあるメソッドに書き換えていきましょう。
サンプルプログラム:
public class Main { public static void main(String[] args) { int addNum = add(5, 2); System.out.println("答えは" + addNum + "です。"); } private static int add(int num1, int num2) { int addAns = num1 + num2; return addAns; } }
実行結果:
答えは7です。
上記のaddメソッドは、引数を足し算し、その答えをreturn文を使って返します。mainメソッドでは、その戻り値を変数addNumに代入しています。これにより、mainメソッドで足し算の結果を表示することができています。
return文で条件によって処理を終了させる方法
条件によって異なる戻り値を返し、処理を終了させることもできます。次のサンプルプログラムを見てください。
サンプルプログラム:
public class Main { public static void main(String[] args) { boolean b = divide5(25); if (b) { System.out.println("割り切れます。"); } else { System.out.println("割り切れません。"); } } private static boolean divide5(int num1) { int ans = num1 % 5; if (ans == 0) { return true; } return false; } }
実行結果:
割り切れます。
上記のdivide5メソッドは、引数が5で割り切れた場合に「return true;」で戻り値としてtrueを返し、処理を終了します。その後の「return false;」は実行されません。
nullをreturn文で返す方法
戻り値として、何も値が入っていないことを表すnullを返すこともできます。
サンプルプログラム:
public class Main { public static void main(String[] args) { String[] arrays1 = {"a", "b", "c"}; System.out.println(getFirstString(arrays1)); String[] arrays2 = {}; System.out.println(getFirstString(arrays2)); } private static String getFirstString(String[] arrays) { if (arrays == null || arrays.length == 0) { return null; } return arrays[0]; } }
実行結果:
a null
上記のgetFirstStringメソッドは、引数として受け取ったString配列arraysの最初の要素を返すメソッドです。arraysがnull、または長さが0の場合に「return null;」でnullを返します。
getFirstStringメソッドは、メソッドの定義でString型の戻り値を返す宣言をしているので、返す値がない場合も「return;」で処理を終了することはできません。
複数の戻り値を返す方法
returnは非常に便利ですが、1つの戻り値しか返せないのが難点です。もし複数の値を返したいときにはどうすればよいのでしょうか?
複数の値を返すには、複数の変数を持った1つのクラスにして返す方法が考えられます。変数num1も変数num2も返したいときには、num1とnum2を持つ1つのクラスにすれば返すことができます。次のサンプルプログラムを見ていきましょう。
サンプルプログラム:
public class Main { public static void main(String[] args) { int num1 = 2; int num2 = 3; Calculation calc = new Calculation(); Calculation value = calc.calcMethod(num1, num2); System.out.println("足し算:" + value.add); System.out.println("掛け算:" + value.mul); } } class Calculation { int add; int mul; public Calculation calcMethod(int num1, int num2) { Calculation calc = new Calculation(); calc.add = num1 + num2; calc.mul = num1 * num2; return calc; } }
実行結果:
足し算:5 掛け算:6
上記のプログラムでは、calcMethodで足し算と掛け算を行い、2つの計算結果を1つのクラスにまとめて、mainメソッドに返し出力しています。このように、複数の変数を1つのクラスにまとめてreturnすることで、複数の戻り値を返す事ができます。
exitメソッドとの違い
ここでは、exitメソッドとreturn文の違いを解説します。メソッドの処理を終了させるにはreturn文を使いますが、プログラムの全体を終了させるにはexitメソッドを使います。return文で処理を終了させる場合には、finallyブロック内の処理が実行されます。
exitメソッドでプログラムを終了させる場合には、finallyブロック内の処理は実行されません。次のプログラムで確認してみましょう。
public class Main { public static void main(String[] args) { try { System.out.println("tryの処理"); return; } catch (Exception e) { System.out.println("catchの処理"); } finally { System.out.println("finallyの処理"); } } }
実行結果:
tryの処理 finallyの処理
このプログラムの実行結果から、return文ではfinallyブロック内の処理が実行されることが確認できました。exitメソッドの使い方はこちらの記事で詳しく解説しているので、ぜひ確認してください。
メソッドの使い方総まとめ
この記事では紹介しきれなかったメソッドのいろいろな使い方を次の記事にまとめているので、ぜひ参考にしてください!
まとめ
この記事ではメソッドの戻り値を使うreturn文について解説しました。戻り値を使うとメソッドの処理の結果を呼び出し元で利用できます。return文は1つの値しか返せませんが、1つのクラスに複数の値をまとめることで複数の値を返すことができます。
もし、メソッドの戻り値について忘れてしまったらこの記事を確認してくださいね!