Javaコラム Javaエンジニアのためのお役立ちコラム

Java

Javaのreturnを分かりやすく解説します!|returnのもう一つの使い方を知ろう

2020年10月25日
SE
Javaのreturnは「処理中のものを中断して返す」のほかには、どのような意味があるのでしょうか。
PM
もう一つの重要な役割として、「呼び出し側に値を返す」という意味もあります。

Javaのreturnとは?


returnとはリターンと読み、日本語で「返す」と訳されます。その通りにJavaでのreturnは返すという動作をします。また、Javaのreturnの返すには2通りの意味があり、処理を行っていたものを中断して返すという意味と、値を返すという意味の2つの役割を持っています。

この記事では、Javaのreturnについての使い方をサンプルで説明しながら解説しますので、Java初心者の方は是非ご覧ください。

classとmethodとreturn

Javaの文法の基本はclass(クラス)とmethod(メソッド)です。以下のサンプルのTestClassがクラス、testMethodとmainがメソッドです。このサンプルを実行するとまずmainメソッドが呼ばれて、その中でtestMethodが2回呼ばれます。

public class TestClass {
public static void testMethod(int val) {
if (val==0) {
System.out.println(“”returnで処理を返します。””);
return;
}

System.out.println(“”テストです。””);
}

public static void main(String[] args) {
testMethod(0);

testMethod(1);
}
}

returnで処理を返せる

testMethodを呼ぶ時にカッコで0と1を渡していますが、これはパラメータと言います。testMethodの(int val)がそのパラメータを受ける変数です。渡された値のvalの中身が0だった場合は、””returnで処理を返します。””と表示して、returnで返ります。その次の””テストです。””は表示されません。

このようにメソッドの処理を打ち切って、処理を返すのがreturnの役割なのです。上のJavaサンプルを実行すると以下のように表示されます。

returnで処理を返します。
テストです。

returnのもう一つの使い方

returnのもう一つの使い方を紹介します。以下のJavaサンプルをご覧ください。

public class TestClass {
public static int testMethod(int val) {
return val*10;
}

public static void main(String[] args) {
int ret = testMethod(5);
System.out.println(ret);
}
}

returnは値を返すことができる

上のJavaサンプルではtestMethodに5を渡して呼び出し、その結果をretに入れています。testMethod側ではパラメータのvalを10倍してreturnで返しています。void testMethodではなくint testMethodになっていることに注意してください。

このサンプルを実行すると以下のように表示されます。

50

このように、「return 値」で呼び出し側に値を返すことができ、これがreturnのもう一つの重要な役割です。

returnで配列を返す

Javaのreturnはintのような基本型だけでなく、配列も返すことができます。以下のJavaサンプルをご覧ください。

public static int[] testMethod(int val) {
int ary[] = new int[3];
ary[0] = val*2;
ary[1] = val*3;
ary[2] = val*4;
return ary;
}

public static void main(String[] args) {
int[] ret = testMethod(3);
System.out.println(ret[0]+”” “”+ret[1]+”” “”+ret[2]);
}

returnの参照返し

上のJavaサンプルではtestMethodに渡されたパラメータを計算して配列に入れ、returnで返しています。このやり方はreturnで配列の参照を返すと言います。以下の例は文字列の参照を返しています。

public static String testMethod(int val) {
return val+””を受け取って文字列を返します。””;
}

public static void main(String[] args) {
System.out.println(testMethod(8));
}

実行結果は以下になります。

8を受け取って文字列を返します。

returnの参照返しはインスタンスを返す

以下のJavaサンプルは、testMethodが渡されたパラメータの値を持つInteger型のインスタンスを返します。

public static Integer testMethod(int val) {
return Integer.valueOf(val);
}

public static void main(String[] args) {
Integer iObj = testMethod(12);

System.out.println(iObj.intValue()+””を受け取りました。””);
}

実行結果は以下になります。

12を受け取りました。

参照返しは深く考えなくて良い

参照返しの話が出てきてから、よくわからなくなってきた人もいるかもしれません。しかし気にする必要はないので、難しく考えないようにしましょう。

Javaのreturnはint型のような基本型だけでなく、配列や文字列、クラス型も返すことができるとだけ理解すればいいです。

難しいことを言うと、returnの参照返しはインスタンスのアドレスを返しているということなのですが、初心者の時点ではまだわからなくても問題ありません。

switch文のreturn

Javaにはswitch文という値によって処理を切り替える構文がありますが、returnを使うとbreakを省略できます。以下のサンプルをご覧ください。

public static void testMethod(int val) {
switch(val) {
case 0:
System.out.println(“”0が来たのでreturnします。””);
return;
default:
break;
}
}

このサンプルではパラメータが0だった場合、すぐreturnしてtestMethodから抜けます。breakは省略できるというより、省略しなければなりません。returnの後にbreakを記述すると「到達できないコード」という理由でエラーになります。

try~catch~finally内のreturn

Javaにはtry~catch~finallyという構文があります。この中でreturnを使うと少しおかしなことになるので注意が必要です。以下のサンプルを見てください。

public static int testMethod() {
try {
return 3;
} catch (Exception e){
} finally {
return 4;
}
}

public static void main(String[] args) {
System.out.println(testMethod());
}

finally節は必ず最優先される

上のサンプルの結果はどうなるのでしょうか。答えは、

4

と表示されます。tryでは3を返していますが、finallyは必ず実行されるというルールがあるのでreturn 4が優先されてしまうのです。

ただしこのサンプルは「finally block does not complete normally」とwarningが出ます。普通じゃない動作をすると警告してくれるのです。

SE
Javaのreturnは難しいイメージでしたが、基本の二つの意味を理解していれば良いのですね。
PM
初心者のうちはJavaのreturnは「メソッドの処理を中断して戻る」と「値を返す」の二つの意味を理解していれば十分でしょう。

return文はJavaの基本

Javaのreturnについて解説しましたが、ご理解頂けましたでしょうか。

基本的なこと以外に変わったケースも紹介しましたが、returnはメソッドの処理を中断して戻ったり、値を返したりすることができるとだけ分かれば、今は十分でしょう。

この記事を参考にJavaのreturnの文法を自分なりに理解しながら、Javaのプログラム作りに役立ててください。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags

Jobs