ホームページ  >  記事  >  Java  >  Java 改善の章 (16)-----例外 (1)

Java 改善の章 (16)-----例外 (1)

黄舟
黄舟オリジナル
2017-02-10 11:41:081126ブラウズ

Java の基本哲学は、「構造が不十分なコードは実行されない」です。 ! ! ! ! Da Cheng が欠けても不利にはなりません。冲冲冲

、それはエンドレスです。

この世に完璧なものは存在しません。どんなに細心の注意を払って完璧な思考をしていても、すべての要素を考慮することはできません。これは、あらゆる考慮の後に間違いを犯すいわゆる賢者です。同様に、コンピューターの世界も完璧ではありません。異常事態はいつでも発生する可能性があります。私たちがすべきことは、避けられる例外を回避し、避けられない例外に対処することだけです。ここでは、例外を使用して「完璧な世界」をプログラムする方法を記録します。

1. 例外を使用する理由 まず第一に、例外処理メカニズムによってプログラムの堅牢性が保証され、システムの可用性が向上することが明確になります。私たちはそれを見るのが特に好きではありませんが、その地位と役割を認識せずにはいられません。異常はプログラムに問題があることを示しており、時間内に修正するのに役立ちます。私たちのプログラミングでは、いつでもどこでも、何らかの理由で例外が発生する可能性があります。例外メカニズムがない場合は、次のように処理します。

例外が発生したかどうかを判断するには、関数の戻り値を使用します (この戻り値は通常一致します)。 )、関数を呼び出すプログラムは戻り値をチェックして分析する責任があります。例外問題は解決できますが、解決にはいくつかの欠点があります。

1. 混乱しやすい。合意された戻り値が -11111 である場合、それは例外を示していますが、プログラムの最終計算結果が実際に -1111 だったらどうなるでしょうか?

2. コードの可読性が低い。例外処理コードとプログラム コードを混在させると、コードが読みにくくなります。

3. 関数を呼び出して例外を分析するには、プログラマがライブラリ関数を深く理解している必要があります。

OO で提供される例外処理メカニズムは、コードの堅牢性を提供する強力な方法です。 例外メカニズムを使用すると、エラー処理コードの複雑さを軽減できます。例外を使用しない場合は、プログラム内のさまざまな場所で特定のエラーをチェックして処理する必要があります。例外を使用する場合は、その必要はありません。例外メカニズムによってエラーが確実に捕捉され、エラーは 1 か所 (いわゆる例外ハンドラー) で処理される必要があるため、チェックしてください。このアプローチは、コードを節約するだけでなく、通常の実行中に何をすべきかを概説するコードを、「何か問題が発生した場合の対処方法」を示すコードから分離します。要約すると、例外メカニズムにより、コードの読み取り、書き込み、デバッグが以前のエラー処理方法よりも体系的に行われるようになります。 (『考える』より抜粋 ジャワでは》)。勉強を始めたばかりの頃は、「間違っているかもしれないところは忘れずに付け加えてください」といつも言っていましたが、それでも理解が深まったばかりで、徐々にその例外を理解していきました。はとても重要です。

2. 基本的な定義

「Java で考える」では、例外は次のように定義されます: 例外状況とは、現在のメソッドまたはスコープの実行を継続できない問題を指します

。ここで 1 つ明確にしておく必要があるのは、例外コードがある程度間違っているということです。Java には例外処理メカニズムがありますが、例外処理メカニズムを「通常の」観点から見ることはできません。その理由は次のとおりです。ここでエラーが発生した場合、またはすでに発生している可能性があります。エラーが発生した場合、プログラムに異常な状況が発生し、プログラムが失敗する可能性があります。

それでは、いつ異常が起こるのでしょうか?プログラムが現在の環境で正常に実行できない場合、つまり、プログラムが問題を正しく解決できない場合にのみ、プログラムは現在の環境から飛び出し、例外をスローします。例外をスローした後、最初にいくつかのことを実行します。まず、new を使用して例外オブジェクトを作成し、次に例外が生成された場所でプログラムを終了し、現在の環境から例外オブジェクトへの参照をポップアップします。例外処理メカニズムはプログラムを引き継ぎ、プログラムの実行を継続するための適切な場所を探し始めます。この適切な場所は、プログラムをエラー状態から回復して、プログラムを実行できるようにすることです。または、別の方法で続けてください。

一般的に、例外処理メカニズムは、プログラム内で例外が発生した場合、プログラムを強制終了し、例外情報を記録し、この情報を私たちにフィードバックするものです。例外を処理するかどうかを決定します。 3. 例外システム

Java は非常に完璧な例外処理メカニズムを提供するため、例外を使用する前に、そのアーキテクチャを理解する必要があります。は、

http://www.php.cn/から引用されています)。上の図からわかるように、Throwable は Java 言語のすべてのエラーと例外のスーパー クラスです (すべてをスローできます)。これには、Error と Exception の 2 つのサブクラスがあります。 エラーとは、OutOfMemoryError、ThreadDeath など、プログラムでは処理できないエラーです。これが発生した場合、できることは放置して JVM に処理させることだけですが、ほとんどのエラーではこの場合、JVM はスレッドの終了を選択します。


例外は、プログラムが処理できる例外です。 CheckedException(検査済み例外)とUncheckedException(未検査例外)の2種類に分かれます。このうち、CheckException はコンパイル段階で発生するため、try...catch (または throws) を使用する必要があり、そうしないとコンパイルが通りません。 UncheckedException は実行時に発生するため不確実であり、主にプログラムのロジックの問題によって発生し、トラブルシューティングが困難なため、プログラムの設計では注意が必要です。よく考えてコードを書き、例外が発生してもできるだけ例外を処理するようにすると、プログラムが良い方向に発展するように努めることができます。


したがって: 回復可能な条件にはチェック済み例外 (CheckedException) を使用し、プログラムには実行時例外 (RuntimeException) を使用します。エラー(エラーは回復不可能であり、大きな間違いが犯されたことを意味します)。

Javaには例外クラスが本当に多すぎて、その原因も刻々と変化しているので、

次のブログ記事をまとめて、Javaでよく発生する例外を数えていきたいと思います。あなたは注意を払うでしょう! !

4. 異常な使用

インターネットでこんな面白い格言を読みました: 世界で最も本当の依存とは、あなたが努力していて、私がそれをキャッチしているときです。どんなに怒られても、黙って耐えて静かに対処します。初心者にとって、例外は try...catch です(私も初めて触れたときはそう思いました。例外に遭遇したときは try...catch です)。個人的には、try...catch が実際に最も使用されており、最も実用的であると感じています。

例外では、try ブロックには例外が発生する可能性のあるコード ブロックが含まれており、catch ブロックは例外をキャッチした後に例外を処理します。まず次の例を見てみましょう:

public class ExceptionTest {
    public static void main(String[] args) {
        String file = "D:\\exceptionTest.txt";
        FileReader reader;
        try {
            reader = new FileReader(file);
            Scanner in = new Scanner(reader);  
            String string = in.next();  
            System.out.println(string + "不知道我有幸能够执行到不.....");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            System.out.println("对不起,你执行不到...");
        }  
        finally{
            System.out.println("finally 在执行...");
        }
    }
}

       这是段非常简单的程序,用于读取D盘目录下的exceptionText.txt文件,同时读取其中的内容、输出。首先D盘没有该文件,运行程序结果如下:

java.io.FileNotFoundException: D:\exceptionTest.txt (系统找不到指定的文件。)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:106)
    at java.io.FileInputStream.<init>(FileInputStream.java:66)
    at java.io.FileReader.<init>(FileReader.java:41)
    at com.test9.ExceptionTest.main(ExceptionTest.java:19)
对不起,你执行不到...
finally 在执行...

       从这个结果我们可以看出这些:

       1、当程序遇到异常时会终止程序的运行(即后面的代码不在执行),控制权交由异常处理机制处理。

       2、catch捕捉异常后,执行里面的函数。

       当我们在D盘目录下新建一个exceptionTest.txt文件后,运行程序结果如下:

1111不知道我有幸能够执行到不.....
finally 在执行...

       11111是该文件中的内容。从这个运行结果可以得出这个结果:不论程序是否发生异常,finally代码块总是会执行。所以finally一般用来关闭资源。

       在这里我们在看如下程序:

public class ExceptionTest {
    public static void main(String[] args) {
        int[] a = {1,2,3,4};
        System.out.println(a[4]);
        System.out.println("我执行了吗???");
    }
}

       程序运行结果:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at com.test9.ExceptionTest.main(ExceptionTest.java:14)

       各位请注意这个异常信息和上面的异常信息错误,为了看得更加清楚,我将他们列在一起:

java.io.FileNotFoundException: D:\exceptionTest.txt (系统找不到指定的文件。)
        Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4

       在这里我们发现两个异常之间存在如下区别:第二个异常信息多了Exception in thread"main",这显示了出现异常信息的位置。在这里可以得到如下结论:若程序中显示的声明了某个异常,则抛出异常时不会显示出处,若程序中没有显示的声明某个异常,当抛出异常时,系统会显示异常的出处。

以上就是java提高篇(十六)-----异常(一)的内容,更多相关内容请关注PHP中文网(www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。