Javaでプログラムを終了させるには、「exitメソッド」を使います。
この記事では、exitメソッドの特徴や使い方などについて解説します。


Exit Code(System.exitメソッド)とは
exitメソッドを使うと、プログラムをその場で終了させます。
記述方法は次の通りです。
- System.exit(0);
exitメソッドの引数に「0」を指定すると正常終了、「0以外」を指定すると異常終了を意味します。
exitメソッドの使い方
では、exitメソッドの使い方を見ていきましょう。
exitメソッドは、その場でプログラムを終了させるので、exitメソッド以降に書かれた処理は実行されません。
次のように記述して、プログラムを実行してみます。
- ■記述例
- public class Main {
- public static void main(String[] args){
- System.out.println("exitメソッドの前に書かれた文章です");
- System.exit(0);
- System.out.println("exitメソッドの後に書かれた文章です");
- }
- }
- ■実行結果
- mbp:Desktop potepan$ java Main
- exitメソッドの前に書かれた文章です
このように、exitメソッド以降の処理は実行されません。


exitメソッドとreturn文の挙動の違い
exitメソッド と return文 は何が違うんですか?
exitメソッドがプログラムを終了するのに対し、return文はメソッドを終了します。実際に挙動を確認してみましょう!
例えば、次のようにプログラムを記述しました。
変数sum と criteria の値が一致すれば、return文が実行されます。
- ■記述例
- public class Main {
- public static void main(String[] args){
- System.out.println("計算を開始します!");
- calc();
- System.out.println("計算を終了しました!");
- }
- public static void calc(){
- int num01 = 10;
- int num02 = 20;
- int sum = num01 + num02;
- int criteria = 30;
- if( sum == criteria ) {
- System.out.println("計算結果 : " + sum);
- return;
- } else {
- System.out.println("計算結果が合わないため、プログラムを終了します!");
- System.exit(1);
- }
- }
- }
return文は、メソッドを終了させる文なため、プログラム自体は終了しません。
そのため、実行結果は次のようになります。
- ■実行結果
- mbp:Desktop potepan$ java Main
- 計算を開始します!
- 計算結果 : 30
- 計算を終了しました!
一方、exitメソッドは先述したようにプログラムを終了させます。
そのため、criteriaの値を変更してプログラムを実行してみると、実行結果は次のようになるのです。
- ■実行結果
- mbp:Desktop potepan$ java Main
- 計算を開始します!
- 計算結果が合わないため、プログラムを終了します!
また、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で実行された処理です!");
- }
- }
- }
- ■実行結果
- mbp:Desktop potepan$ java Main
- tryで実行された処理です!
- finallyで実行された処理です!
- ■記述例
- public class Main {
- public static void main(String[] args){
- try {
- System.out.println("tryで実行された処理です!");
- System.exit(0);
- } catch (Exception e) {
- System.out.println("catchで実行された処理です!");
- } finally {
- System.out.println("finallyで実行された処理です!");
- }
- }
- }
- ■実行結果
- mbp:Desktop potepan$ java Main
- tryで実行された処理です!
for文をexitメソッドで終了
exitメソッドは、for文の中でも使用可能です。
例えば、次のプログラムでは変数iが「8」になった時点でプログラムを終了させています。
- ■記述例
- public class Main {
- public static void main(String[] args){
- System.out.println("---ループを開始します---");
- for (int i = 0; i < 10; i++) {
- System.out.println(i + "回目の処理です");
- if (i == 8) {
- System.out.println("---プログラムを終了します---");
- System.exit(0);
- }
- }
- System.out.println("---ループを終了します---");
- }
- }
- ■実行結果
- mbp:Desktop potepan$ java Main
- ---ループを開始します---
- 0回目の処理です
- 1回目の処理です
- 2回目の処理です
- 3回目の処理です
- 4回目の処理です
- 5回目の処理です
- 6回目の処理です
- 7回目の処理です
- 8回目の処理です
- ---プログラムを終了します---
このように、ループが終了しています。
「プログラムを終了するのではなく、for文を抜けたいんだけど」
こんな場合は、「break文」「continue文」を使いましょう!
break文は、ループ処理を中断し、途中で抜けるときに使える構文です。
一方、continue文は、ループ処理の途中で処理をスキップし、次のループ処理に移るときに使える構文です。
実際にそれぞれの構文の処理を見ていきましょう。
まずは、break文です。
- ■記述例
- public class Main {
- public static void main(String[] args){
- System.out.println("---ループを開始します---");
- for (int i = 0; i < 10; i++) {
- System.out.println(i + "回目の処理です");
- if (i == 8) {
- System.out.println("---breakを実行します---");
- break;
- }
- }
- System.out.println("---ループを終了します---");
- }
- }
- ■実行結果
- mbp:Desktop potepan$ java Main
- ---ループを開始します---
- 0回目の処理です
- 1回目の処理です
- 2回目の処理です
- 3回目の処理です
- 4回目の処理です
- 5回目の処理です
- 6回目の処理です
- 7回目の処理です
- 8回目の処理です
- ---breakを実行します---
- ---ループを終了します---
実行結果をわかる通り、8回目の処理でループが終了しているのがわかります。
しかし、プログラムは終了せずに、最後の「—ループを終了します—」まで表示されていますね。
次に、continue文です。
- ■記述例
- public class Main {
- public static void main(String[] args){
- System.out.println("---ループを開始します---");
- for (int i = 0; i < 10; i++) {
- System.out.println(i + "回目の処理です");
- if (i == 8) {
- System.out.println("---continueを実行します---");
- continue;
- }
- }
- System.out.println("---ループを終了します---");
- }
- }
- ■実行結果
- mbp:Desktop potepan$ java Main
- ---ループを開始します---
- 0回目の処理です
- 1回目の処理です
- 2回目の処理です
- 3回目の処理です
- 4回目の処理です
- 5回目の処理です
- 6回目の処理です
- 7回目の処理です
- 8回目の処理です
- ---continueを実行します---
- 9回目の処理です
- ---ループを終了します---
こちらは、8回目の処理の後に「—continueを実行します—」が表示され、次の処理(9回目)に移っています!
このように、それぞれ挙動が異なるので、使い分けるようにしましょう!


まとめ
Javaのexitメソッドについて解説しました。
exitメソッドは、プログラムを完全に終了させたい場合に使います。
finallyブロックも実行しないといった特徴があるので、ぜひ使い方を覚えてプログラムを実装してみてください!
プログラムを終了させたい場合は exitメソッド を使う!
メソッドを終了させたい場合は return文 を使う!