プログラムを書くにあたって、エラーは避けられずその対処方法は様々です。本記事ではエラーの種類と実際にエラーが生じたときの対処方法を紹介していきます!
エラーの種類

エラーは生じる状況によって3種類に分けられます。①コンパイルエラー ②実行エラー ③論理エラーの3つです。「コンパイル」という単語を聞いたことのない人は、学習した後にこの記事を読んでください。それでは各エラーについて学習していきましょう。
コンパイルエラー
コンパイルエラーは、コンパイル時に発生するエラーのことです。文法エラーやタイピングミスがあったときに生じ、コードを書いている人ならまず初めに見るエラーになります。
実行エラー
次は実行エラーです。実行エラーは、コンパイルはできるものの実行時に処理落ちするエラーのことを指します。「NullPointerException」などがその代表例です。実行時エラーは製品を作る上であってはならないエラーなのできちんとエラーハンドリングを行い、テストを通して解消する必要があります。
論理エラー
次は論理エラーです。コンパイルや実行エラーは起きていないものの、「開発者の想定していない値が入っている場合」をいいます。こちらもきちんとテストを行い解消しましょう。
例外とは

次に、例外について学習していきましょう。例外は「実行エラー」のことを指します。コンパイル正常にできたものの、実行してみるとエラーが起きているという状態です。例外処理を記述しないと、サーバーダウンを起こしてしまうのでしっかりとエラーハンドリングをする必要があります。
例外の種類

例外にはエラーハンドリングが必要なものとそうでないものの2つの種類があります。checked例外とunchecked例外の2つです。
checked例外
checked例外は、「コンパイル時に例外処理を記述したかどうかを確認する例外」のことを指します。DB接続(データベース接続)などJava実行環境以外で発生する例外のことを指します。
unchecked例外
一方、unchecked例外は、「コンパイル時に例外処理を記述したかどうかを確認しない例外」のことを指します。実行時例外やメモリ不足などプログラムの例外処理だけでは対処できない例外のことを指します。
例外クラスの種類
例外を扱うクラスは大きく分けてErrorクラスとExceptionクラスの2つです。どちらもThrowableクラスを継承しているという特徴があります。Errorクラス系の例外は「ClassFormatError」などJava実行環境で発生する致命的なエラーを含んでいます。一方、Exceptionクラスは「NullPointException」などアプリケーションを動かす際に発生するエラーを含んでいます。

例外の処理方法

次に例外を扱う方法について学習していきましょう。例外は「try catch文」などで対処します。
try-catch文
try {
処理内容;
} catch(例外クラス 変数名) {
例外処理;
}
try catch文は上記のように記述します。まず、例外が起きる可能性のある処理をtryブロック内に書きます。catchの引数として指定した例外クラスが起きた場合、catchブロック内でエラーハンドリングを行います。例外が複数個 想定される場合は、catch文は複数記述することも可能です。
try-catch-finally文
try {
処理内容;
} catch(例外クラス 変数名) {
例外処理;
}finally{
処理内容;
}
エラーハンドリングをしながらも、処理を続けたいということもあるかもしれません。この場合はtry-catch-finally文を使用します。try-catchの後ろにfinallyをつけることでエラーの有無に関係なく処理を実行させることができます。もし、catch文中にreturnが記述してあったとしても、finallyは必ず実行されるというのが特徴です。finally文はtry文1つに対して1つしか実装できないので注意しましょう。
throwsとthrow
例外の学習をしていると、「throw」と「throws」という言葉をよく聞くと思います。似ているようで実は全く違うこの2つ。次は「throw」と「throws」について学習していきましょう。
throw
try {
処理内容;
} catch(例外クラス 変数名) {
throw new 例外クラス_2(変数名);
}
まず、throwについて学習していきましょう。throwは「任意のタイミングでエラーを出したい際」に使用します。上記のような使い方をすることが多いでしょう。
catch内でこのように記述することでエラーを自主的に発生させることができます。catch内でなくても使用可能なので、適所で使用するようにしましょう。
throws
//例外付きメソッドを用意したクラス
class Sample{
public void score() throws ArrayIndexOutOfBoundsException {
int[] score = {20,100,80};
for(int i = 0; i < 4; i++) {
System.out.println("score:" + score[i]);
}
}
}
//例外付きメソッドの呼び出し
class Sample_2{
public static void main(String[] args) {
try {
Sample sample = new Sample();
sample.score();
}catch(ArrayIndexOutOfBoundsException e){
System.out.println("例外が発生しました。");
}
}
}
throwsは例外が発生するメソッドの定義時に使用します。メソッドに対して、「throws 例外クラス名」を指定することで指定された例外クラスのエラーがメソッド内で生じた場合に、呼び出し元に例外を投げます。
Sample_2クラスで呼び出されたscoreメソッドで例外が生じた場合は「ArrayIndexOutOfBoundsException」のオブジェクトが生成されるので、catchが例外を取得し、System.out.println(“例外が発生しました。”);が作動します。
例外クラスを作る
アクセス修飾子 class クラス名 extends Exception {
//処理内容
}
例外クラスは自分で作成することも可能です。作成方法は上記のようになります。Exceptionクラスを継承することで作成することが可能です。
最後に
例外処理は初心者プログラマーにとって超えるべき最初の壁と言っても過言ではありません。特にthrow,throwsに関しては理解するまでに苦戦するかもしれませんが、しっかりと理解してコードを書くようにしましょう。