プログラムを実行している間に、予期せぬ事態やエラーが発生することがあります。例えば、ファイルを読み込もうとした際にファイルが存在しない場合や、数値の0で割ろうとした場合などが考えられます。このような異常事態は「例外」と呼ばれ、例外が発生すると通常、プログラムの実行は停止します。
Javaでは、例外の発生を検出し、適切に処理するための「例外処理」機能が提供されています。この機能を使用することで、エラーが発生した場合でもプログラムが適切に動作するように制御できます。
Javaの例外処理には、主に次の3つのキーワードが使用されます:
以下に、try-catch
構文の基本的な構造を示します。
try {
// 例外が発生する可能性のある処理
} catch (ExceptionType e) {
// 例外が発生した場合の処理
} finally {
// 必ず実行される処理
}
try-catch
構文は、Javaにおいて例外を処理する基本的な方法です。try
ブロック内に記述されたコードが実行され、例外が発生した場合は、catch
ブロック内の処理が実行されます。これにより、プログラムが予期せぬエラーでクラッシュするのを防ぎ、エラーに対して適切な対処を行えます。
例: 数値を0で割った場合の例外処理
public class ExceptionExample {
public static void main(String[] args) {
try {
int result = divide(10, 0);
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("エラー: " + e.getMessage());
}
}
public static int divide(int numerator, int denominator) {
return numerator / denominator;
}
}
上記のコードでは、divide
メソッドで0で割ろうとすると、ArithmeticException
という例外が発生します。この例外はcatch
ブロックで捕捉され、エラーメッセージが出力されます。catch
ブロックがなければ、プログラムはクラッシュしますが、try-catch
構文を使うことで、適切にエラーを処理できるようになります。
throw
構文は、プログラム内で意図的に例外を発生させるために使用されます。例えば、メソッド内で特定の条件が満たされない場合に、例外を投げることで、呼び出し元にエラーが発生したことを通知できます。
例: 数値が負の値である場合に例外を投げる
public class NegativeNumberExceptionExample {
public static void main(String[] args) {
try {
int result = squareRoot(-10);
System.out.println("Result: " + result);
} catch (IllegalArgumentException e) {
System.out.println("エラー: " + e.getMessage());
}
}
public static int squareRoot(int number) {
if (number < 0) {
throw new IllegalArgumentException("負の数の平方根は計算できません。");
}
return (int)Math.sqrt(number);
}
}
この例では、squareRoot
メソッドで負の数が渡された場合にIllegalArgumentException
をthrow
しています。throw
された例外はcatch
ブロックで捕捉され、エラーメッセージが表示されます。
Javaでは、独自の例外クラスを作成することができます。これを「カスタム例外」と呼び、特定の条件や状況に合わせて独自のエラーメッセージやエラー処理を行う際に有用です。
カスタム例外クラスを作成するには、Exception
クラスまたはRuntimeException
クラスを継承します。通常、Exception
クラスを継承したカスタム例外はチェック例外、RuntimeException
クラスを継承したカスタム例外は非チェック例外となります。
例: 負の数を入力した場合のカスタム例外
class NegativeNumberException extends Exception {
public NegativeNumberException(String message) {
super(message);
}
}
上記のコードでは、NegativeNumberException
というカスタム例外を作成しました。この例外は、負の数が入力された場合に使用されることを想定しています。
次に、このNegativeNumberException
を用いたコード例を示します。
public class CustomExceptionExample {
public static void main(String[] args) {
try {
int result = factorial(-5);
System.out.println("Result: " + result);
} catch (NegativeNumberException e) {
System.out.println("エラー: " + e.getMessage());
}
}
public static int factorial(int number) throws NegativeNumberException {
if (number < 0) {
throw new NegativeNumberException("負の数の階乗は計算できません。");
}
int result = 1;
for (int i = 1; i <= number; i++) {
result *= i;
}
return result;
}
}
このコードでは、factorial
メソッドが負の数を受け取ると、NegativeNumberException
がthrow
されます。メインメソッドでは、この例外をcatch
ブロックでキャッチし、エラーメッセージを表示します。このように、カスタム例外を使用することで、より詳細で分かりやすいエラーメッセージを提供することができます。
finally
ブロックは、例外が発生したかどうかに関係なく、必ず実行されるコードブロックです。通常、ファイルのクローズ処理やデータベース接続の解放など、リソースの後処理に使用されます。
例: ファイルの読み取りとfinallyブロックの使用
import java.io.*;
public class FinallyExample {
public static void main(String[] args) {
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} catch (IOException e) {
System.out.println("ファイルの読み込み中にエラーが発生しました。");
} finally {
try {
if (reader != null) {
reader.close();
}
} catch (IOException e) {
System.out.println("リソース解放中にエラーが発生しました。");
}
}
}
}
上記のコードでは、BufferedReader
を使ってファイルを読み込んでいますが、ファイルのクローズ処理をfinally
ブロックで行っています。これにより、例外が発生した場合でも、ファイルが確実にクローズされるようになります。
Javaで例外処理を行う際の一般的なベストプラクティスをいくつか紹介します。
Exception
クラスでキャッチするのは避けましょう。この章では、Javaの例外処理の基本からカスタム例外の作成方法までを詳しく解説しました。適切な例外処理を行うことで、プログラムの信頼性を向上させ、ユーザーにとって快適な動作を提供できるようになります。
プログラミングを始めたいと思っているそこのあなた、独学よりもプログラミングスクールが断然おすすめです!理由は簡単、続けやすさです。
独学でプログラミングを続けるのは、実はかなりハードルが高いんです。データによると、なんと87.5%もの学習者が途中で挫折しているとか。一方、各プログラミングスクールが公表しているデータによると、受講生の約95%が最後までやり抜いているとのこと。数字を見れば一目瞭然、プログラミングスクールの方が圧倒的に続けやすいんです。
プログラミングスクールには有料と無料のタイプがありますが、その違いは次の通りです:
どちらが自分に合っているか、よく考えて選ぶのが大事です。
プログラミング初心者でも学びやすいと評判の『FREEKS』、その特徴は以下の通り:
なんと、月会費のみで全カリキュラムが受け放題!Java、PHP、HTML/CSS、JavaScriptなど、多彩なプログラミング言語が学べるんです。しかも、AIが質問に自動で答えてくれるシステムも導入済み。
カリキュラムを終了した後には、Freeks経由で未経験者でも取り組める副業案件の受注が可能。実務を通じてスキルを磨き、市場価値の高いエンジニアへの道が開けます。
独学で悩むくらいなら、まずはプログラミングスクールをチェックしてみるのもアリかもしれませんよ!
↓ ↓ こちらをクリック ↓ ↓