Heim  >  Artikel  >  Java  >  Kapitel zur Java-Verbesserung (16) ----- Ausnahme (1)

Kapitel zur Java-Verbesserung (16) ----- Ausnahme (1)

黄舟
黄舟Original
2017-02-10 11:41:081127Durchsuche

Die Grundphilosophie von Java lautet: „Schlecht strukturierter Code wird nicht ausgeführt“! ! ! ! !

Fehlt es, ist es nicht benachteiligt.

Da Ying Ruoyong, es ist endlos.

Es gibt nichts Perfektes auf dieser Welt. Egal wie akribisch und sorgfältig das perfekte Denken ist, wir können nicht alle Faktoren berücksichtigen Ein weiser Mann wird jedes Mal einen Fehler machen, wenn er denkt. Ebenso ist die Computerwelt nicht perfekt. Alles, was wir tun müssen, ist, die Ausnahmen zu vermeiden, die vermieden werden können, und mit den Ausnahmen umzugehen, die nicht vermieden werden können. Hier werde ich aufzeichnen, wie man Ausnahmen verwendet, um eine „perfekte Welt“ zu programmieren.

 

1. Warum Ausnahmen verwenden?

Zunächst können wir klarstellen, dass der Ausnahmebehandlungsmechanismus die Robustheit unseres Programms sicherstellen kann und die Systemverfügbarkeit verbessern. Obwohl wir es nicht besonders gerne sehen, können wir nicht umhin, seinen Status und seine Rolle zu erkennen. Auffälligkeiten deuten darauf hin, dass ein Problem mit dem Programm vorliegt, was uns hilft, das Problem rechtzeitig zu beheben. In unserer Programmierung können Ausnahmen jederzeit und überall aus beliebigen Gründen auftreten. Wenn es keinen Ausnahmemechanismus gibt, gehen wir folgendermaßen damit um:

: Verwenden Sie den Rückgabewert der Funktion, um zu bestimmen, ob eine Ausnahme vorliegt (Dieser Rückgabewert wird in der Regel vereinbart.) Das aufrufende Programm ist für die Prüfung und Analyse des Rückgabewerts verantwortlich. Obwohl Ausnahmeprobleme gelöst werden können, gibt es dabei mehrere Mängel:

 1. Wenn der vereinbarte Rückgabewert -11111 ist, weist dies auf eine Ausnahme hin. Was ist dann, wenn das endgültige Berechnungsergebnis des Programms tatsächlich -1111 ist?

                                                                  . Durch das Mischen von Ausnahmebehandlungscode und Programmcode wird der Code schlechter lesbar.

3. Die Analyse von Ausnahmen durch Aufrufen von Funktionen erfordert ein tiefes Verständnis der Bibliotheksfunktionen.

     

Der in OO bereitgestellte Ausnahmebehandlungsmechanismus ist eine leistungsstarke Möglichkeit, Code-Robustheit bereitzustellen. Die Verwendung des Ausnahmemechanismus kann die Komplexität des Fehlerbehandlungscodes verringern. Wenn Sie keine Ausnahmen verwenden, müssen Sie an vielen Stellen im Programm nach bestimmten Fehlern suchen und diese behandeln am Aufrufort, da der Ausnahmemechanismus dafür sorgt, dass der Fehler abgefangen wird und der Fehler nur an einer Stelle, dem sogenannten Ausnahmehandler, behandelt werden muss. Dieser Ansatz spart nicht nur Code, sondern trennt auch den Code, der beschreibt, was während der normalen Ausführung zu tun ist, von dem Code, der sagt, „was zu tun ist, wenn etwas schief geht“. Zusammenfassend lässt sich sagen, dass der Ausnahmemechanismus das Lesen, Schreiben und Debuggen von Code organisierter macht als frühere Fehlerbehandlungsmethoden. (Auszug aus „Think in Java》).

In der ersten Schule höre ich immer auf den Lehrer, der sagt, dass die Orte, an denen Fehler gemacht werden können, daran erinnert werden, damit umzugehen. Jetzt fahre ich fort Um mehr Code zu vertiefen und zu schreiben, verstehe ich allmählich, dass Ausnahmen sehr wichtig sind.

2. Grunddefinition

In „Think in Java“ werden Ausnahmen wie folgt definiert:

Eine Ausnahme bezieht sich auf ein Problem, das verhindert, dass die aktuelle Methode oder der aktuelle Bereich weiterhin ausgeführt wird . Eines muss hier klargestellt werden: Der Ausnahmecode ist in gewissem Maße falsch. Obwohl Java über einen Ausnahmebehandlungsmechanismus verfügt, können wir Ausnahmen nicht aus einer „normalen“ Perspektive betrachten. Der Grund für den Ausnahmebehandlungsmechanismus ist, Ihnen etwas zu sagen Wenn hier ein Fehler auftritt, liegt möglicherweise eine abnormale Situation vor, die dazu führen kann, dass das Programm fehlschlägt!

                                                                                                                                                                                               Wann tritt eine Anomalie auf? Nur wenn das Programm in Ihrer aktuellen Umgebung nicht normal laufen kann, also das Problem nicht mehr richtig lösen kann, springt es aus der aktuellen Umgebung und löst eine Ausnahme aus. Nachdem eine Ausnahme ausgelöst wurde, werden zunächst einige Dinge ausgeführt. Zuerst wird new verwendet, um ein Ausnahmeobjekt zu erstellen, dann wird das Programm an der Stelle beendet, an der die Ausnahme generiert wird, und der Verweis auf das Ausnahmeobjekt wird aus der aktuellen Umgebung angezeigt. Der Ausnahmebehandlungsmechanismus übernimmt das Programm und beginnt mit der Suche nach einem geeigneten Ort, um die Ausführung des Programms fortzusetzen. Dieser geeignete Ort ist der Ausnahmebehandler. Seine Aufgabe besteht darin, das Programm aus dem Fehlerzustand wiederherzustellen, damit das Programm entweder ausgeführt werden kann Oder machen Sie weiter.

Im Allgemeinen besteht der Ausnahmebehandlungsmechanismus darin, dass beim Auftreten einer Ausnahme im Programm das Programm zwangsweise beendet, die Ausnahmeinformationen aufgezeichnet und diese Informationen eingespeist werden zurück zu uns Lassen Sie uns entscheiden, ob die Ausnahme behandelt werden soll.

3. Ausnahmesystem

Java bietet uns einen sehr perfekten Ausnahmebehandlungsmechanismus, der es uns ermöglicht, mehr zu sein Wenn wir uns auf unser Programm konzentrieren, müssen wir seine Architektur verstehen, bevor wir Ausnahmen verwenden: wie folgt (dieses Bild stammt von: http://www.php.cn/).



Aus dem Bild oben Es ist ersichtlich, dass Throwable die Superklasse aller Fehler und Ausnahmen in der Java-Sprache ist (alles kann geworfen werden). Es gibt zwei Unterklassen: Fehler und Ausnahme.

Fehler ist ein Fehler, der vom Programm nicht behandelt werden kann, wie z. B. OutOfMemoryError, ThreadDeath usw. Wenn dies passiert, können Sie nur Folgendes tun Lassen Sie es los und überlassen Sie es der JVM. In den meisten Fällen entscheidet sich die JVM jedoch dafür, den Thread zu beenden.

 Eine Ausnahme ist eine Ausnahme, die das Programm verarbeiten kann. Es ist in zwei Arten von CheckedException (geprüfte Ausnahme) unterteilt, eine davon ist UncheckedException (ungeprüfte Ausnahme). Unter diesen tritt CheckException während der Kompilierungsphase auf, und try...catch (oder throws) muss verwendet werden, andernfalls wird die Kompilierung nicht bestanden. UncheckedException tritt während der Laufzeit auf und ist unsicher. Sie wird hauptsächlich durch logische Probleme des Programms verursacht und ist schwer zu beheben. Um solche abnormalen Fehler zu finden, müssen wir im Allgemeinen vorsichtig sein. Denken Sie darüber nach, schreiben Sie den Code gut und versuchen Sie, Ausnahmen so gut wie möglich zu behandeln. Selbst wenn eine Ausnahme auftritt, können Sie versuchen, sicherzustellen, dass sich das Programm in eine günstige Richtung entwickelt.

Also: Verwenden Sie geprüfte Ausnahmen (CheckedException) für behebbare Bedingungen, für Programmfehler (die Implikation ist, dass sie nicht behebbar sind, und ein großer Fehler). wurde erstellt) ) mithilfe einer Laufzeitausnahme (RuntimeException).

                                                                            In meinem nächsten Blogbeitrag werde ich Statistiken zu den Ausnahmen zusammenstellen, die in Java I häufig auftreten Ich hoffe, Sie werden aufmerksam sein! !

4. Ungewöhnlicher Gebrauch

Ich habe so etwas Lustiges gesehen Die Internet-Wörter: Die wahrste Abhängigkeit der Welt besteht darin, dass man es versucht und ich erwischt werde. Egal wie wütend du bist, ich werde es still ertragen und ruhig damit umgehen. Für Anfänger sind Ausnahmen try...catch (das dachte ich auch, als ich zum ersten Mal damit in Kontakt kam, und als ich auf Ausnahmen stieß, war es try...catch). Ich persönlich bin der Meinung, dass try...catch in der Tat am häufigsten verwendet wird und am praktischsten ist.

In der Ausnahme enthält der Try-Block den Codeblock, der eine Ausnahme verursachen kann, und der Catch-Block fängt die Ausnahme ab und behandelt die Ausnahme. Schauen wir uns zunächst die folgenden Beispiele an:

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)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn