Javaでの例外処理[例付き]

公開: 2020-11-12

例外は、プログラマーが決して望まないプログラムの望ましくない予期しないイベントですが、何度も対処する必要があります。 明るい面は、オブジェクト指向言語Javaを使用すると、 「Javaでの例外処理」と呼ばれる概念を通じて、これらの望ましくないイベントを軽減できることです。 例外を修復することはありませんが、それに対処するための代替方法を提供します。

誤ったデータの入力、ハードウェア障害、接続障害、サーバーのダウンなど、例外が発生する理由は多数あります。したがって、 Javaを学習する過程では、通常の状態を保証するのに役立つため、例外処理が常に重要になります。予期しないイベントが発生したときのプログラムのフロー。 例外を無視すると、ソフトウェア全体がクラッシュし、データが失われる可能性があります。

例外と例外処理について理解したので、それについて詳しく調べ、Javaが例外の処理にどのように役立つかを理解しましょう。

読む:例外処理の面接の質問

目次

例外処理とは何ですか?

開発者は、実行時にコードの一部がスローする可能性のある例外を予測できます。 多くの学習者が曖昧になる最も重要なことの1つは、すべての例外がコンパイル時ではなく実行時に発生することです。 Javaは、実行時にのみ例外を処理できます。 例外ハンドラブロックを作成するためにJavaプログラムで使用される特定のキーワードがあります。

java.lang.Exceptionは、すべての例外クラスの親クラスです。 Exceptionクラスは、 Objectクラスサブクラスである組み込みのThrowableクラスのサブクラスです 例外とは別に、Throwableには別のクラス、つまりエラーと例外の主な違いであるJavaプログラムでは処理できないプログラム実行中の異常な状態であるエラーもあります。

上図に示すように、Javaには主に2つの例外カテゴリがあります。 次のセクションでは、Javaの例外のタイプについて詳しく見ていきます。

Javaの例外

例外の根本的な原因は、プログラマーまたは何らかの理由で失敗した物理リソースによって引き起こされたものです。 これらに基づいて、Javaの例外には主に2つのカテゴリがあり、以下に詳細を示します。

  1. チェックされた例外
  2. 未チェックの例外

1.チェックされた例外

チェックされた例外は、コンパイラによるコンパイル中にチェックされ、例外がプログラマによって処理されるかどうかを監視するため、「コンパイル時例外」と呼ばれます。 その後、システムはコンパイルエラーを表示します。

これらの例外の例としては、 IOException 読む:初心者のためのJavaプロジェクトのアイデア

2.チェックされていない例外

チェックされていない例外は、プログラムの実行中に発生するため、「実行時例外」と呼ばれます。 チェックされていない例外は通常、コンパイル中に無視され、チェックされません。

これらの例外の例としては、論理エラーなどのプログラムのバグや、プログラマーの制御下になく、システム管理者が修正する必要のある誤ったAPIを使用している場合があります。

チェックされた例外とチェックされていない例外

差別化ポイントチェックされた例外チェックされていない例外取り扱い時間チェックされた例外は、コンパイル時にチェックおよび処理されます。 チェックされていない例外は、コンパイル時にチェックされません。
例外の識別メソッドがチェック例外をスローすると、プログラムはコンパイルエラーを出します。 コンパイラは例外をチェックできないため、プログラムは正常にコンパイルされます。
継承それらはRuntimeExceptionクラスを継承しません。 これらはRuntimeExceptionクラスのサブクラスです。
開発者の役割開発者が処理できます。 開発者は処理できません。

例外を理解することは、それらを処理する前の主要なステップです。

Javaは例外の処理にどのように役立ちますか?

これで、Javaには、チェックされたものとチェックされていないものの2種類の例外があることがわかりました。 メソッドがチェック例外をスローしている場合は、 try-catchブロックで処理するか、プログラムでのコンパイルエラーを回避するために「 throws」キーワードを宣言する必要があります。

チェックされた例外の例:

これは、「Java」という名前のファイルを読み取るプログラムです。 チェックされた例外がスローされる場所は3つあります。

  1. FileInputStream:ファイルパスと名前throwFileNotFoundExceptionを指定するために使用されます
  2. read()メソッド:ファイルの内容を読み取るとIOExceptionがスローされます。

iii。 close()メソッド:ファイル入力ストリームを閉じると、 IOExceptionがスローされます

java.io.*をインポートします。

クラス{

public static void main( String args [])

{{

FileInputStream fis = null ;

/ *コンストラクターFileInputStream(File filename)

*チェックされた例外FileNotFoundExceptionをスローします*/

fis = new FileInputStream “ B:/java.txt” );

int k;

/ * FileInputStreamクラスのメソッドread()がスローします

*チェックされた例外:IOException

* /

while ((k = fis.read())!= – 1

{{

システム アウト 印刷(( char )k);

}

/ *メソッドclose()は、ファイル入力ストリームを閉じます

*IOExceptionをスローします*/

fis.close();

}

}

上記のプログラムの出力:

スレッド「main」 java.lang例外が見つかりました。 エラー未解決のコンパイルの問題:

未処理の例外FileNotFoundExceptionが見つかりました

未処理の例外IOExceptionが見つかりました

未処理の例外IOExceptionが見つかりました

このコンパイルエラーの理由:例外の非宣言または処理。

必読: JavaGitHubプロジェクト

例外処理の方法

例外を処理するには、次の2つの方法があります。

方法1:「throws」例外キーワードを宣言する

上記のプログラムでは、チェックされた3つの例外はすべてmain()メソッド内にあります。 したがって、コンパイルエラーを回避する1つの方法は、「throws」キーワードを使用してメソッドで例外を宣言することです。 IOExceptionはFileNotFoundExceptionの親クラスであるため、それもカバーします。

throwsキーワードを使用してプログラムを更新しました:

java.io.*をインポートします。

クラス{

public static void main( String args [])IOExceptionをスローします

{{

FileInputStream fis = null ;

fis = new FileInputStream “ B:/java.txt” );

int k;

while ((k = fis.read())!= – 1

{{

システム アウト 印刷(( char )k);

}

fis.close();

}

}

出力:

画面にファイルの内容を表示します。

方法2:try-catchブロックを使用して例外を処理します。

これは、上記の1つに対するより高度なアプローチであり、最良の例外処理方法の1つです。 try-catchブロックを含む変更されたプログラムコードは次のとおりです。

java.io.*をインポートします。

クラス{

public static void main( String args [])

{{

FileInputStream fis = null ;

{を試してください

fis = new FileInputStream “ B:/java.txt” );

} catch FileNotFoundException fnfe){

システム out .println( "ファイルは" +

「指定されたパスに存在する」 );

}

int k;

{を試してください

while ((k = fis.read())!= – 1

{{

システム アウト 印刷(( char )k);

}

fis.close();

} catch IOException ioe){

システム out .println( "I/Oエラー" +ioe);

}

}

}

出力:

このコードは、最終的にファイルの内容を表示します。

未チェックの例外の例

未チェックの例外は、コンパイル時にチェックされません。 プログラムが宣言または処理されておらず、正常に実行されている場合、プログラムはコンパイルエラーを出しません。 開発者の仕事は、そのような例外を引き起こす可能性のある条件を事前に予測し、それらを処理することです。 チェックされていないすべての例外は、 RuntimeExceptionクラスのサブクラスです。

クラス{

public static void main( String args [])

{{

int num1 = 10 ;

int num2 = 0 ;

/*任意の数を0で割る

*ArithmeticExceptionをスローします

* /

int res = num1 / num2;

システム out .println(res);

}

}

コードはこのコードで正常にコンパイルされますが、実行時に、チェックされていない例外がコンパイル時にチェックされないため、 ArithmeticExceptionがスローされます。 別の例を見てみましょう。

クラス{

public static void main( String args [])

{{

int arr [ ] = { 1、2、3、4、5 } ; _ _ _

/ *配列には5つの要素がありますが、

*8番目の要素の値を表示します。 投げます

* ArrayIndexOutOfBoundsException

* /

システム out .println(arr [ 7 ]);

}

}

ArrayIndexOutOfBoundsExceptionはチェックされていない例外であるため、このコードも正常にコンパイルされます。

ここで、チェックされていない例外を処理するために、表示したい例外メッセージがユーザーに表示されるはずですが、それは配列に存在しません。

try-catchブロックを使用した上記のコード例外の処理

クラス{

public static void main( String args []){

{を試してください

int arr [ ] = { 1、2、3、4、5 } ; _ _ _

システム out .println(arr [ 7 ]);

}

catch ArrayIndexOutOfBoundsException e){

システム out .println( "指定されたインデックスは存在しません" +

「アレイ内。」 );

}

}

}

出力:

指定されインデックスがアレイ存在ませ

注:さまざまな例外を処理するために、tryブロック内に複数のcatchブロックが存在する場合があります。

方法3 :「finally」キーワードを使用する

例外が発生した場合でも、コードを実行する必要がある場合があります。 ここで、 finalキーワードが使用されます。 これは、「finally」キーワードを使用した一般的なコードです。

public int getPlayerScore(String playerFile)

FileNotFoundExceptionをスローします{

スキャナーの内容=null;

試す {

内容=新しいスキャナー(新しいファイル(playerFile));

Integer.parseInt(contents.nextLine());を返します。

}最後に{

if (contents!= null ){

contents.close();

}

}

}

ここで、最後ブロックは、ファイルを読み取ろうとしたときにJavaで実行するコードを示しています。

FileNotFoundExceptionがスローされた場合でも、Javaはfinallyの内容を呼び出します

以下のようにコードを変更することで、例外を処理できます。

public int PlayerScore(String playerRuns){

スキャナーの内容;

試す {

内容=新しいスキャナー(新しいファイル(playerRuns));

Integer.parseInt(contents.nextLine());を返します。

} catch(FileNotFoundException noFile){

logger.warn( "ファイルが見つかりません。");

0を返します。

} 最後に {

試す {

if(contents!= null){

contents.close();

}

} catch(IOException ioexc){

logger.error( "リーダーを閉じることができませんでした。"、ioexc);

}

}

}

結論

この記事では、Javaでのエラーと例外および例外処理の基本を理解しようとしました このガイドが、Javaが提供するこの独自の機能についての良いアイデアを提供し、例外を処理してそれらからより適切に回復できるようになることを願っています。 結論

Javaは、特定の例外から一般的な例外まで、例外を処理する方法を提供します。 事前に簡単に予測できない例外は、未処理の例外と呼ばれます。 すべての例外をキャプチャすることで、開発チームはコードの品質とエラーの根本原因を把握でき、迅速に修正できます。

Java、フルスタック開発について詳しく知りたい場合は、フルスタックソフトウェア開発におけるupGrad&IIIT-BのPGディプロマをご覧ください。 専門家向けに慎重にキュレーションされており、360度のキャリアサポートを保証し、取り組むライブプロジェクトが含まれています。 コースを修了すると、Swiggy、IMDBなどのアプリケーションを設計および構築できるようになります。

エキサイティングに聞こえませんか!-

フルスタック開発者になる

ソフトウェア開発におけるアップグレードおよびIIIT-BANGALOREのPGディプロマ
もっと詳しく知る