>  기사  >  Java  >  Java 개선 장(16)------예외(1)

Java 개선 장(16)------예외(1)

黄舟
黄舟원래의
2017-02-10 11:41:081145검색

Java의 기본 철학은 "잘못된 구조의 코드는 실행되지 않는다"입니다! ! ! ! !

결석해도 불이익을 받지 않습니다.

Da Ying Ruoyong, 끝이 없습니다.

아무리 꼼꼼하고 신중하게 완벽한 사고를 한다고 해도 모든 요소를 ​​고려할 수는 없는 것이 바로 A라는 것입니다. 현명한 사람은 생각할 때마다 실수를 하게 마련이다. 마찬가지로 컴퓨터 세계도 완벽하지 않기 때문에 언제든지 비정상적인 상황이 발생할 수 있습니다. 피할 수 있는 예외는 피하고, 피할 수 없는 예외는 처리하면 됩니다. 여기서는 "완벽한 세상"을 프로그래밍하기 위해 예외를 사용하는 방법을 기록하겠습니다.

 

1. 예외를 사용하는 이유

우선, 예외 처리 메커니즘이 프로그램의 견고성을 보장할 수 있다는 점을 분명히 할 수 있습니다. 시스템 가용성을 향상시킵니다. 우리는 그것을 별로 보고 싶지 않지만 그 위상과 역할을 인식하지 않을 수 없습니다. 이상은 프로그램에 문제가 있음을 나타내며 이는 제때에 문제를 해결하는 데 도움이 됩니다. 우리 프로그래밍에서는 예외가 언제 어디서나 어떤 이유로든 발생할 수 있습니다. 예외 메커니즘이 없으면 다음과 같이 처리합니다.

: 함수의 반환 값을 사용하여 예외가 발생했는지 확인합니다. (이 반환 값은 일반적으로 합의됩니다.) 함수를 호출하는 프로그램은 반환 값을 확인하고 분석합니다. 예외 문제는 해결될 수 있지만 이렇게 하면 몇 가지 결함이 있습니다.

 1. 쉽게 혼동됩니다. 반환 값이 -11111이라는 데 동의하면 예외를 나타내는데, 프로그램의 최종 계산 결과가 실제로 -1111이면 어떻게 될까요?

                                                                                                                        . 예외 처리 코드를 프로그램 코드와 혼합하면 코드 읽기가 어려워집니다.

3. 함수를 호출하여 예외를 분석하려면 프로그래머가 라이브러리 함수에 대한 깊은 이해가 필요합니다.

    

OO에서 제공되는 예외 처리 메커니즘은 코드 견고성을 제공하는 강력한 방법입니다. 예외 메커니즘을 사용하면 오류 처리 코드의 복잡성을 줄일 수 있습니다. 예외를 사용하지 않는 경우에는 특정 오류를 확인하고 프로그램의 여러 위치에서 처리해야 합니다. 예외 메커니즘은 오류가 포착되고 오류가 소위 예외 처리기라는 한 곳에서만 처리되도록 보장하기 때문에 호출 사이트에서 발생합니다. 이 접근 방식은 코드를 절약할 뿐만 아니라 정상적인 실행 중에 수행할 작업을 설명하는 코드와 "무언가 잘못되면 수행할 작업"을 설명하는 코드를 분리합니다. 요약하면, 예외 메커니즘은 이전 오류 처리 방법보다 코드 읽기, 쓰기 및 디버깅을 더 체계적으로 만듭니다. ('생각하다'에서 발췌) 자바》).

처음 학교에서는 실수할 수 있는 곳은 기억해서 처리해야 한다는 선생님의 말씀을 늘 듣곤 했는데, 지금은 계속하고 있어요. 더 많은 코드를 심화하고 작성하려면 예외가 매우 중요하다는 것을 점차 이해하게 됩니다.

2. 기본 정의

Think in java에서는 예외를 다음과 같이 정의합니다.

예외는 현재 메서드나 범위가 을 계속 실행하지 못하게 하는 문제를 나타냅니다. 여기서 한 가지 분명히 해야 할 것은 예외 코드가 어느 정도 잘못되었다는 것입니다. Java에는 예외 처리 메커니즘이 있지만 "일반적인" 관점에서 예외를 볼 수는 없습니다. 예외 처리 메커니즘이 있는 이유는 다음과 같습니다. 여기서 오류가 발생했을 수도 있고 이미 발생했을 수도 있습니다. 오류가 발생하면 프로그램에 비정상적인 상황이 발생하여 프로그램이 실패할 수 있습니다.

                                                                                          > 프로그램이 현재 환경에서 정상적으로 실행될 수 없는 경우, 즉 프로그램이 더 이상 문제를 올바르게 해결할 수 없는 경우에만 현재 환경에서 벗어나 예외가 발생합니다. 예외를 던진 후 먼저 몇 가지 작업을 수행합니다. 먼저 new를 사용하여 예외 개체를 만든 다음 예외가 생성된 위치에서 프로그램을 종료하고 현재 환경에서 예외 개체에 대한 참조를 팝업합니다. 예외 처리 메커니즘은 프로그램을 인계받아 프로그램 실행을 계속할 수 있는 적절한 위치를 찾기 시작합니다. 이 적절한 위치는 예외 처리기입니다. 해당 작업은 프로그램이 실행될 수 있도록 오류 상태에서 프로그램을 복구하는 것입니다. 아니면 계속 가세요.

일반적으로 예외 처리 메커니즘은 프로그램에서 예외가 발생하면 프로그램을 강제 종료하고 예외 정보를 기록하고 이 정보를 제공하는 것입니다. 예외 처리 여부를 결정해 보겠습니다.

3. 예외 시스템

java는 매우 완벽한 예외 처리 메커니즘을 제공하므로 더 많은 작업을 수행할 수 있습니다. 프로그램에 초점을 맞춰 예외를 사용하기 전에 해당 아키텍처를 이해해야 합니다. 다음과 같습니다(이 사진의 출처: http://www.php.cn/).



위 사진에서 It Throwable은 Java 언어의 모든 오류와 예외의 상위 클래스라는 것을 알 수 있습니다(모든 것이 발생할 수 있음). 여기에는 오류와 예외라는 두 가지 하위 클래스가 있습니다.

여기서 Error는 OutOfMemoryError, ThreadDeath 등과 같이 프로그램에서 처리할 수 없는 오류입니다. 이런 일이 발생하면 할 수 있는 유일한 작업은 이를 그대로 두고 JVM이 처리하도록 남겨 두지만 JVM은 대부분의 경우 스레드를 종료하도록 선택합니다.

 예외는 프로그램이 처리할 수 있는 예외입니다. CheckedException(checked 예외)의 두 가지 유형으로 나뉘며 하나는 UncheckedException(unchecked 예외)입니다. 그 중 CheckException은 컴파일 단계에서 발생하며, try...catch(또는 throws)를 사용해야 하며, 그렇지 않으면 컴파일이 통과되지 않습니다. UncheckedException은 런타임 중에 발생하며 불확실합니다. 이는 주로 프로그램의 논리 문제로 인해 발생하며 문제 해결이 어렵습니다. 일반적으로 이러한 비정상적인 오류를 찾으려면 전반적인 상황을 살펴봐야 하므로 프로그램 설계에 주의가 필요합니다. 생각해보고, 코드를 잘 작성하고, 최대한 예외를 처리하도록 노력하세요. 예외가 발생하더라도 프로그램이 좋은 방향으로 발전하도록 노력할 수 있습니다.

그래서: 복구 가능한 조건, 프로그램 오류에 대해 확인된 예외(CheckedException)를 사용합니다(복구할 수 없다는 의미이며 큰 실수입니다). ) 런타임 예외(RuntimeException)를 사용합니다.

                                                                                   다음 블로그 포스팅에서는 Java I에서 자주 발생하는 예외에 대한 통계를 정리하겠습니다. 당신이주의를 기울이기를 바랍니다! !

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으로 문의하세요.