매우 전면적 인 자바 이상 처리(전문 건어물,소장 가치)

1.초기 Java 이상
1.이상 에 대한 이해:이상:자바 언어 에서 프로그램 실행 중 발생 하 는 비정상적인 상황 을'이상'이 라 고 합 니 다.(개발 과정 에서 의 문법 오류 와 논리 적 오 류 는 이상 이 아니다)
2.자바 프로그램 이 실행 하 는 과정 에서 발생 하 는 이상 사건 은 두 가지 로 나 눌 수 있 습 니 다.
  •  Error:자바 가상 컴퓨터 가 해결 할 수 없 는 심각 한 문제.예 를 들 어 JVM 시스템 내부 오류,자원 소모 등 심각 한 상황.예 를 들 어 Stack Overflow Error 와 OOM.일반적으로 맞 춤 형 코드 를 작성 하지 않 고 처리 합 니 다.
  • Exception:프로 그래 밍 오류 나 우연 한 외적 요인 으로 인 한 일반적인 문 제 는 맞 춤 형 코드 로 처리 할 수 있 습 니 다.
  • 빈 포인터 방문
  • 존재 하지 않 는 파일 을 읽 으 려 고 시도 합 니 다
  • 네트워크 연결 중단
  • 수조 각 표 월경
  • 3.실행 시 이상 및 컴 파일 시 이상
    런 타임 이상
  • 은 컴 파일 러 가 강제 처 리 를 요구 하지 않 는 이상 을 말한다.일반적으로 프로 그래 밍 시의 논리 적 오 류 를 말 하 는데 프로그래머 가 그 이상 을 적극적으로 피해 야 한 다 는 것 이다.java.lang.Runtime Exception 클래스 와 하위 클래스 는 모두 실행 중 이상 입 니 다.
  • 은 이러한 이상 에 대해 처리 하지 않 아 도 된다.왜냐하면 이런 이상 은 매우 보편적 이기 때문에 전체 처리 가 프로그램의 가 독성 과 운행 효율 에 영향 을 미 칠 수 있 기 때문이다.
  • 컴 파일 시 이상
  • 은 컴 파일 러 가 반드시 처리 해 야 할 이상 을 말한다.프로그램 이 실 행 될 때 외부 요인 으로 인 한 일반적인 이상 이다.컴 파일 러 는 자바 프로그램 이 모든 컴 파일 시 이상 을 포착 하거나 성명 해 야 한다 고 요구 합 니 다.
  • 이러한 이상 에 대해 프로그램 이 처리 하지 않 으 면 예상 치 못 한 결 과 를 가 져 올 수 있다.
  • 在这里插入图片描述
    2.Error 와 Exception
    1.Error
    코드 예제 1:java.lang.OutOfmory Error(넘 침)
    
    public class ErrorTest {
     public static void main(String[] args) {
     //   :java.lang.OutOfMemoryError
     Long[] arr = new Long[1024*1024*1024];
     }
    }
    
    실행 결과:
    在这里插入图片描述
    코드 예시 2:java.lang.StackOverflow 오류(창고 넘 침)
    
    public class ErrorTest {
     public static void main(String[] args) {
    
     //   :java.lang.StackOverflowError
     main(args);
     }
    }
    
    
    실행 결과:
    在这里插入图片描述
    2.Exception(실행 시 이상 및 컴 파일 시 이상)
    런 타임 이상
    
     /* ******************        ****************** */
     //ArithmeticException
     @Test
     public void test1(){
     int num1 = 3;
     int num2 = 0;
     int num3 = 3 / 0;
     }
    
     //InputMismatchException
     @Test
     public void test2(){
     Scanner scanner = new Scanner(System.in);
     int i = scanner.nextInt();
     System.out.println(i);
     scanner.close();
     }
    
     //NumberFormatException
     @Test
     public void test3(){
     String str = "abcd";
     int num = Integer.parseInt(str);
     }
    
     //ClassCastException
     @Test
     public void test4(){
     Object obj = new Boolean(true);
     String str = (String)obj;
     }
    
     //IndexOutOfBoundsException
     @Test
     public void test5(){
     ArrayIndexOutOfBoundsException
     Byte[] bytes = new Byte[3];
     System.out.println(bytes[4]);
     }
    
     //NullPointerException
     @Test
     public void test6(){
     int[] arr = null;
     System.out.println(arr[1]);
     }
    
    
    컴 파일 시 이상
    
    /* ******************        ****************** */
     @Test
     public void test7(){
     File file = new File("a.txt");
     //java.io.FileNotFoundException
     FileInputStream fis = new FileInputStream(file);
     //java.io.IOException
     int date = fis.read();
     while (date != -1){
      System.out.println((char)date);
      date = fis.read();
     }
    
     fis.close();
     }
    
    ps:컴 파일 시 이상,이상 처리 가 필요 합 니 다.
    3.이상 처리:잡 아 던 지기 모형
     1.잡기 설명
    프로 세 스 1:"던 지기":프로그램 이 정상적으로 실행 되 는 과정 에서 이상 이 발생 하면 이상 코드 에 대응 하 는 이상 클래스 의 대상 을 생 성하 고 이 대상 을 던 집 니 다.대상 을 던 지면 그 후의 코드 는 더 이상 실행 되 지 않 는 다.
    이상 대상 생 성:
    ① 시스템 에서 자동 으로 생 성 되 는 이상 대상
    ② 이상 대상 을 수 동 으로 생 성하 고 던 지기(throw)
    프로 세 스 2:"잡기":이상 한 처리 방식 으로 이해 할 수 있 습 니 다.① try-catch-finally ② throws
    2.try-catch-finally 의 사용
    
    try{
    //         
    
    }catch(    1    1){
    //       1
    }catch(    2    2){
    //       2
    }catch(    3    3){
    //       3
    }
    …
    finally{
    //        
    }
    
    
    설명:
  • finally 는 선택 할 수 있 습 니 다.
  • try 를 사용 하여 이상 이 발생 할 수 있 는 코드 세그먼트 를 포장 하고 실행 과정 에서 이상 이 발생 하면 이상 류 에 대응 하 는 대상 을 생 성 합 니 다.이 대상 의 유형 에 따라 catch 에 가서
  • 과 일치 합 니 다.
  • try 의 이상 대상 이 특정한 catch 에 일치 하면 catch 에 들 어가 이상 한 처 리 를 합 니 다.일단 처리 가 끝나 면 현재 의 것 에서 벗 어 납 니 다.
    try-catch 구조.그 후의 코드
  • 을 계속 실행 합 니 다.
  • catch 의 이상 유형 이 하위 클래스 관계 가 없 으 면 누가 위 에 성명 하고 누가 아래 에 성명 하 든 상관없다.
    catch 의 이상 유형 이 하위 클래스 관 계 를 만족 시 키 려 면 하위 클래스 를 구 하려 면 반드시 부모 클래스 에 성명 해 야 합 니 다.그렇지 않 으 면
  • 을 잘못 보 고 했 습 니 다.
  • 에서 자주 사용 하 는 이상 대상 처리 방식:① String getMessage()② printStackTrace()
  • try 구조 에서 설명 한 변 수 는 try 구조 가 나 온 후에
  • 으로 호출 될 수 없습니다.
  • try-catch-finally 구 조 는
  • 을 포함 할 수 있 습 니 다.
  • finally 에서 반드시 실 행 될 코드 라 고 밝 혔 습 니 다.catch 에 또 이상 이 생 겨 도 try 에 return 문 구 는 있 고 catch 에 return 문 구 는 있 습 니 다.
  • 예 를 들 어 데이터베이스 연결,입 출력 흐름,네트워크 프로 그래 밍 Socket 등 자원 은 JVM 이 자동 으로 회수 할 수 없 기 때문에 우 리 는 수 동 으로 자원 의 방출 을 해 야 한다.이 자원 의 방출 은 finally 에 성명 해 야 합 니 다.
  • 예시 1:
    
    @Test
    public void test1(){
     String str = "abcd";
     int num = 1314;
     try {
     num = Integer.parseInt(str);
    
     System.out.println("  try   !");
     }catch (NumberFormatException e){
     System.out.println("         !");
     System.out.println(e.getMessage());
     e.printStackTrace();
     System.out.println(" catch         !");
     } catch (NullPointerException e){
     System.out.println("       !");
     } catch (Exception e){
     System.out.println("     ");
     }finally {
     System.out.println("  finally   !");
     }
     System.out.println(num);
    }
    
    출력 결과:
    在这里插入图片描述
    예시 2:
    
     @Test
     public void test2(){
      File file = new File("a.txt");
      FileInputStream fis = null;
      try {
       fis = new FileInputStream(file);
       int date = fis.read();
       while(date != -1){
        System.out.println((char)date);
        date = fis.read();
       }
    
    
      } catch (FileNotFoundException e) {
       e.printStackTrace();
      }catch (IOException e){
       e.printStackTrace();
      }finally {
       System.out.println("  finally   !");
       try {
        fis.close();
       } catch (IOException e) {
        e.printStackTrace();
       }
      }
     }
    
    출력 결과:
    在这里插入图片描述
    요약:
  • try-catch-finally 를 사용 하여 컴 파일 을 처리 할 때 이상 합 니 다.컴 파일 할 때 오류 가 발생 하지 않 지만 실행 할 때 오류 가 발생 할 수 있 습 니 다.try-catch-finally 를 사용 하여 컴 파일 할 때 발생 할 수 있 는 이상 을 실행 할 때 까지 지연 시 키 는 것 과 같 습 니 다.
  • 개발 에서 실행 할 때 매우 흔 하기 때문에 우 리 는 실행 할 때 이상 하 게 try-catch-finally 를 작성 하지 않 습 니 다.컴 파일 할 때 이상 한 것 에 대해 우 리 는 반드시 이상 한 처 리 를 고려 해 야 한다 고 말 했다.
  • 3.throws+이상 유형의 사용
    "throws+이상 유형"은 방법의 성명 에 적 혀 있 습 니 다.이 방법 이 실 행 될 때 던 질 수 있 는 이상 유형 을 알려 줍 니 다.방법 체 가 실 행 될 때 이상 이 발생 하면 이상 코드 에 이상 류 의 대상 을 생 성 합 니 다.이 대상 은 throws 후 이상 유형 을 만족 시 킬 때 던 집 니 다.이상 코드 후속 코드 는 더 이상 실행 되 지 않 습 니 다!
    try-catch-finally:진짜 이상 을 처 리 했 습 니 다.
    throws 방식 은 방법의 호출 자 에 게 이상 을 던 지 는 것 입 니 다.진정 으로 이상 처 리 를 하지 않 았 습 니 다.
    하위 클래스 재 작성 방법 에서 던 진 이상 유형 은 부모 클래스 재 작성 방법 에서 던 진 이상 유형 보다 크 지 않 습 니 다.(하위 클래스 재 작성 방법 도 이상 을 던 지지 않 을 수 있 습 니 다)
    
    public class SuperClass {
     public void method() throws IOException {
    
     }
    }
    
    class SubClass extends SuperClass{
     //  ,                                
    // public void method() throws Exception{
    //
    // }
    
     public void method() throws FileNotFoundException{
    
     }
    }
    
    
    개발 중 try-catch-finally 를 어떻게 선택 합 니까?아니면 throws 를 사용 합 니까?부모 클래스 에서 재 작성 되 는 방법 이 throws 방식 으로 이상 을 처리 하지 않 으 면 하위 클래스 재 작성 방법 도 throws 를 사용 할 수 없습니다.
    하위 클래스 재 작성 방법 에 이상 이 있 으 면 try-catch-finally 방식 으로 처리 해 야 합 니 다.집행 하 는 방법 a 에서 선후 로 다른 몇 가지 방법 을 호출 했 는데 이 몇 가지 방법 은 점진 적 인 관계 에서 집행 한 것 이다.우 리 는 이 몇 가지 방법 으로 throws 를 사용 할 것 을 건의 합 니 다.
    라 는 식 으로 처리 했다.실행 방법 a 는 try-catch-finally 방식 으로 처리 하 는 것 을 고려 할 수 있다.
    코드 예제:
    
    public class ErrorThrows {
     public static void method1() throws IOException {
      File file = new File("a.txt");
      FileInputStream fileInputStream = new FileInputStream(file);
      
      int data = fileInputStream.read();
      while(data != -1){
       System.out.println((char)data);
       data = fileInputStream.read();
      }
      fileInputStream.close();
     }
     
     public static void method2() throws IOException {
      method1();
     }
     
     public static void method3() throws IOException {
      method1();
     }
    
     public static void main(String[] args) {
      try {
       method3();
      } catch (IOException e) {
       e.printStackTrace();
      }
     }
    }
    
    
    4.이상 클래스 대상 을 수 동 으로 던 지기(throw 키워드 사용)
    코드 예제:
    
    public class ReturnException {
     static void method1(){
      try{
       System.out.println("    1");
       throw new RuntimeException("      ");
      }catch (Exception e){
       e.printStackTrace();
       System.out.println(e.getMessage());
      } finally {
       System.out.println("  finally   !");
      }
     }
    
     public static void main(String[] args) {
      method1();
     }
    }
    
    
    출력 결과:
    在这里插入图片描述
    4.사용자 정의 이상 클래스
    사용자 정의 이상 클래스 는 다음 과 같은 세 단계 가 있 습 니 다.
  • 기 존의 이상 구조 에 계승:Runtime Exception,Exception
  • 전체 상수 제공:serialVersion UID
  • 무 거 운 짐 을 제공 하 는 구조 기
  • 사용자 정의 이상 클래스:
    
    public class MyExceptionClass extends Exception{
    
     static final long serialVersionUID = -5641210210148784L;
    
     public MyExceptionClass() {
     }
    
     public MyExceptionClass(String message) {
      super(message);
     }
    }
    
    
    위 사용자 정의 이상 클래스 대상 을 수 동 으로 던 집 니 다:
    
    public class MyExceptionTest {
    
     static void method1() throws MyExceptionClass {
      Scanner scanner = new Scanner(System.in);
    
      System.out.println("     0   :");
      double next = scanner.nextDouble();
      if(next >0){
       System.out.println("       :"+next);
      }else {
       throw new MyExceptionClass("           !");
      }
     }
    
     public static void main(String[] args) {
      try {
       method1();
      } catch (MyExceptionClass myExceptionClass) {
       myExceptionClass.printStackTrace();
      }
     }
    }
    
    
    실행 결과:
    在这里插入图片描述
    아주 전면적 인 자바 이상 처리 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 이상 처리 건어물 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

    좋은 웹페이지 즐겨찾기