【初心者用】Javaの例外処理についてまとめてみた
公開日: 2022/8/24
更新日: 2022/8/24
Javaで記述したプログラムで発生するエラーは、大別して3つに分けられます。
コンパイル時に発生するコンパイルエラーと、プログラム実行時に発生する実行エラー、問題なく実行できるものの、期待できる結果になっていない論理エラーです。
今回は、その中の「実行エラー」に着目してみます。
して、ただ「エラーが発生しました」というだけで終わらせるのではなく、発生したエラーに対して別途記述した処理を行わせるのが、例外処理となります。
今回は、その例外について、具体例を交えた解説とともに、例外処理の方法について解説していきます。
コンパイル時に発生するコンパイルエラーと、プログラム実行時に発生する実行エラー、問題なく実行できるものの、期待できる結果になっていない論理エラーです。
今回は、その中の「実行エラー」に着目してみます。
して、ただ「エラーが発生しました」というだけで終わらせるのではなく、発生したエラーに対して別途記述した処理を行わせるのが、例外処理となります。
今回は、その例外について、具体例を交えた解説とともに、例外処理の方法について解説していきます。
1. そもそも例外って?
冒頭でも述べましたが、エラーはコンパイル時に発生するコンパイルエラーと、プログラム時に発生する実行エラーに大別されます。
コンパイル時に発生するコンパイルエラーとは、そもそもプログラムが文法的に間違っている場合で、変数やメソッドの記述ミスであったり、構文の使い方を間違えたとかいうものです。
具体例として、以下にプログラムを書いてみます。
財布の中身を表示させるプログラムです。
これをコンパイルした結果が、こちらです。
エラーは、String型で宣言したxに、int型の「1」を代入していたせいですね。
このように、コンパイルエラーについては、変数に代入するデータ型のミスや、単純なプログラムの記述ミス等の文法上のミスであることが多いです。
続いて、実行時のエラーです。
実行時のエラーとは、簡潔に言い表すと「予期せぬエラー」です。
文法自体は正しく、本来であれば正常に働くはずが、状況によって予期しない事象が起こり、発生したエラーが、それに当たります。
具体例として、以下にプログラムを書いてみました。
ユーザーに数値を入力させて、それをDouble型に変換したうえで10パーセント上乗せした値を消費税込みとして表示させるプログラムです。
コンパイル時に発生するコンパイルエラーとは、そもそもプログラムが文法的に間違っている場合で、変数やメソッドの記述ミスであったり、構文の使い方を間違えたとかいうものです。
具体例として、以下にプログラムを書いてみます。
財布の中身を表示させるプログラムです。
- public class Sample {
- public static void main(String[] args) {
- String x = 1;
- System.out.println("私の財布の中身は" + x + " 円です");
- }
- }
これをコンパイルした結果が、こちらです。
エラーは、String型で宣言したxに、int型の「1」を代入していたせいですね。
このように、コンパイルエラーについては、変数に代入するデータ型のミスや、単純なプログラムの記述ミス等の文法上のミスであることが多いです。
続いて、実行時のエラーです。
実行時のエラーとは、簡潔に言い表すと「予期せぬエラー」です。
文法自体は正しく、本来であれば正常に働くはずが、状況によって予期しない事象が起こり、発生したエラーが、それに当たります。
具体例として、以下にプログラムを書いてみました。
ユーザーに数値を入力させて、それをDouble型に変換したうえで10パーセント上乗せした値を消費税込みとして表示させるプログラムです。
- import java.util.Scanner;
- public class Sample2 {
- public static void main(String[] args) {
- System.out.println("開始します");
- </
2. 基本的な例外処理
例外処理には、try文を使用します。
基本的な書き方は、以下になります。
以上について、解説していきます。
まず、例外が発生するかもしれない、つまりは例外処理の対象となる処理を、tryの後の「{}」で囲ったブロック内に記述します。
そして、例外が発生した時に行いたい処理を、catchの後の「{}」で囲ったブロック内に記述します。
catchの「()」内には、発生が予想される例外クラスと変数を記述します。
処理の流れとしては、try後の「{}」内でエラーが発生すると、そこで処理は一度止まります。
そして、発生した例外が、後に記述されたcatchの「()」に記述された例外クラスと一致するものがあった場合、そのcatchの「{}」内の処理が実行されることになります。
上記の例文のように、catchは1つのtryに対して複数記述することができるため、発生する可能性のある例外について複数のcatchを記述し、備えておくことが可能です。
catchブロック内の処理が終了すると、try文自体が終了し、try文の次の処理へ移行します。
(try文の「{}」内の処理の続きが実行されることはありません。
実際に、具体例を示してみます。
以下は、前項でも使用した消費税込みの値段を表示するプログラムです。
基本的な書き方は、以下になります。
- try{
- //例外処理の対象となる処理
- }
- catch(例外クラス1 変数名1){
- //例外クラス1の例外が発生した時に行う処理
- }
- catch(例外クラス2 変数名2){
- //例外クラス2の例外が発生した時に行う処理
- }
以上について、解説していきます。
まず、例外が発生するかもしれない、つまりは例外処理の対象となる処理を、tryの後の「{}」で囲ったブロック内に記述します。
そして、例外が発生した時に行いたい処理を、catchの後の「{}」で囲ったブロック内に記述します。
catchの「()」内には、発生が予想される例外クラスと変数を記述します。
処理の流れとしては、try後の「{}」内でエラーが発生すると、そこで処理は一度止まります。
そして、発生した例外が、後に記述されたcatchの「()」に記述された例外クラスと一致するものがあった場合、そのcatchの「{}」内の処理が実行されることになります。
上記の例文のように、catchは1つのtryに対して複数記述することができるため、発生する可能性のある例外について複数のcatchを記述し、備えておくことが可能です。
catchブロック内の処理が終了すると、try文自体が終了し、try文の次の処理へ移行します。
(try文の「{}」内の処理の続きが実行されることはありません。
実際に、具体例を示してみます。
以下は、前項でも使用した消費税込みの値段を表示するプログラムです。
- import java.util.Scanner;
- public class Sample2 {
- public static void main(String[] args) {
- System.out.println("開始します");
- System.out.print