자바 예외 처리 메커니즘

이상

1. 예외 란 무엇입니까?

Java의 오류는 크게 두 가지 범주로 나눌 수 있습니다.

한 가지 유형은 일반적으로 피할 수있는 구문 오류를 나타내는 컴파일 시간 오류 입니다.

다른 유형은 런타임 오류 입니다.

Java의 다양한 런타임 예외 를 설명하는 데 특별히 사용되는 예외 집합 ( 예외 클래스)이 있으며, 예외 클래스와 결합 된 Java는 오류 처리 메커니즘을 제공합니다.

구체적인 단계는 다음과 같습니다.
프로그램에서 오류가 발생하면 오류 정보를 포함하는 예외 클래스의 인스턴스화 된 개체가 생성되고 개체가 시스템에 자동으로 제출되고 시스템이 예외를 처리 할 수있는 코드로 전송합니다. 처리를 위해.

예외는 오류와 예외의 두 가지 범주로 나눌 수 있습니다.

오류는 JVM에 의해 생성 된 시스템 오류를 의미하며 우리가 작성한 프로그램은이를 처리 할 수 ​​없습니다.

예외는 프로그램 실행 중에 발생하는 오류를 말하며 우리가 작성한 프로그램이이를 처리 할 수 ​​있습니다.

2. 비정상적인 사용

예외를 사용하려면 try 및 catch 키워드 두 개를 사용해야 하며이 두 키워드를 함께 사용해야합니다. 예외를 throw 할 수있는 코드를 모니터링하려면 try를 사용하십시오. 예외가 잡히면 예외 객체가 생성되고 전달됩니다. 처리, 기본 구문은 다음과 같습니다.

try{
    
    
	//可能抛出异常的代码
}catch(Exception e){
    
    
	//处理异常
}
package com.song.exception;

public class Test {
    
    
	public static void main(String[] args) {
    
    
		try {
    
    
			int num = 10/10;
		}catch (Exception e) {
    
    
			// TODO: handle exception
			if(e.getMessage().equals("/ by zero")) {
    
    
			//用err的输出为红色
				System.err.println("分母不能为0");
			}
		}
	}
}

try and catch 외에도 finally 키워드사용하여 예외를 처리 할 수 있습니다 . finally의 기능은 무엇입니까?

프로그램의 예외 발생 여부에 관계없이 finally 코드 블록의 코드가 실행되고 마지막으로 일반적으로 catch 코드 블록을 따릅니다. 기본 구문은 다음과 같습니다.

try{
    
    
	//可能抛出异常的代码
}catch(Exception e){
    
    
	//处理异常
}finally{
    
    
	//必须执行的代码
}

한 가지 예 :

package com.song.excepton;

public class Test2 {
    
    
	public static void main(String[] args) {
    
    
		System.out.println(test());
	}
	public static int test() {
    
    
		try {
    
    
			System.out.println("try...");
			return 10;
		}catch(Exception e) {
    
    
			
		}finally{
    
    
			System.out.println("finally...");
			return 20;
		}
	}

}

출력은 다음과 같습니다.
try ...
finally ...
20

프로그램이 예외를 던 졌는지 여부에 관계없이 finally 코드 블록의 코드는 확실히 실행되고 finally의 반환 결과는 try에서 이미 반환 된 결과를 덮어 쓰고 외부 호출자에게 반환되므로 자원 해제는 일반적으로 최종적으로 수행됩니다.

3. 비정상

Java는 런타임에 발생하는 모든 오류를 클래스로 캡슐화하며 클래스가 아니라 클래스 집합입니다. 동시에 트리 구조에서 계층별로 등급이 매겨진 이러한 클래스 간에는 계층 적 관계가 있으며 최상위 클래스는 모든 비정상 클래스의 루트 노드 인 Throwable 입니다.

Throwable에는 Error와 Exception의 두 가지 직접적인 하위 클래스가 있습니다. Throwable, Error, Exception은 모두 java.lang 패키지에 저장됩니다.

Error의 하위 클래스에는 VirtualMachineError (가상 머신 예외), AWTError, IOError (입력 및 출력 스트림 예외)가 포함됩니다.

VirtualMachineError의 하위 클래스는 StackOverflowError (스택 메모리 오버플로 예외), OutOfMemoryError (메모리 오버플로 예외)입니다. 시스템 오류이며 처리 할 수없는 메모리 오버플로와 같은 시스템 문제를 설명하는 데 사용됩니다.

Exception의 하위 클래스에는 IOException 및 RuntimeException이 포함됩니다. IOException은 java.io 패키지에 저장되고 RuntimeException은 java.lang 패키지에 저장됩니다.

IOException의 하위 클래스에는 FileLockInterruptionException, FileNotFoundException 및 FilerException이 포함됩니다. 이러한 예외는 일반적으로 IO 스트림을 통한 파일 전송 중에 발생하는 오류입니다.

RuntimeException의 서브 클래스는 다음과 같습니다.

  • (1) ArithmeticException : 비정상적인 수학 연산을 나타냅니다.
  • (2) ClassNotFoundException : 테이블 클래스의 정의되지 않은 예외입니다.
  • (3) IlllelArgumentException : 매개 변수 형식이 잘못되었음을 나타냅니다.
  • (4), ArrayIndexOutOfBounds : 배열 인덱스가 범위를 벗어 났음을 나타냅니다.
  • (5), NullPointException : 널 포인터 예외를 나타냅니다.
  • (6) NoSuchMethodException : 메서드가 정의되지 않은 예외임을 나타냅니다.
  • (7), NumberFormatException : 다른 데이터 유형이 숫자 유형으로 변환 될 때 발생하는 유형 불일치 예외를 나타냅니다.
4, 던지기와 던지기

Throw와 Throw 는 Java가 예외를 처리 할 때 사용하는 두 가지 키워드로 둘 다 예외를 throw하는 데 사용할 수 있지만 사용되는 방법과 의미는 완전히 다릅니다.

Java에서 예외를 발생시키는 세 가지 방법이 있습니다.

  • (1) 트라이 캐치
  • (2) throw를 사용하는 것은 개발자가 적극적으로 예외를 던지는 것을 의미합니다. 즉, throw 코드를 읽을 때 예외를 throw해야합니다. 기본 구문 : throw new Exception ()은 논리를 기반으로 예외를 적극적으로 throw하는 방법입니다. 코드의.
public class Test {
    
    
	public static void main(String[] args) {
    
    
		int[] array = {
    
    1,2,3};
		test(array,2);
	}
	
	public static void test(int[] array,int index) {
    
    
		if(index >= 3 || index < 0) {
    
    
			try {
    
    
				throw new Exception();
			} catch (Exception e) {
    
    
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}else {
    
    
			System.out.println(array[index]);
		}
	}
}
  • (3) try-catch와 throw는 모두 특정 논리 코드에 대해 동작하고 throw는 메서드에 의해 throw 될 수있는 예외를 설명하는 메서드에 대해 동작합니다.

throw하는 메서드가 RuntimeException 또는 해당 하위 클래스 인 경우 외부에서 호출 될 때 처리 할 필요가 없으며 JVM이 처리합니다.

throw하는 메서드가 Exception 또는 해당 하위 클래스 인 경우 외부 호출 중에 처리되어야합니다. 그렇지 않으면 오류가보고됩니다.

public class Test {
    
    
	public static void main(String[] args) throws Exception {
    
    
		test("123");
	}
	
	public static void test(String str) throws Exception {
    
    
		int num = Integer.parseInt(str);
	}
	
}
5. 예외 캡처의 세 가지 방법 :
  • try-cath 자동 캡처
  • 예외를 적극적으로 던져
  • throws는 예외를 던질 수있는 메서드를 수정합니다.
6, 사용자 지정 예외

Java에서 제공하는 예외를 사용하는 것 외에도 요구 사항에 따라 예외를 사용자 지정할 수도 있습니다.

package com.song.exception;

public class MyNumberException extends RuntimeException {
    
    
	public MyNumberException(String error) {
    
    
		super(error);
	}
}
package com.song.exception;

public class Test {
    
    
	public static void main(String[] args){
    
    
		Test test = new Test();
		System.out.println(test.add("a"));
	}
	
	public int add(Object object){
    
    
		if(object instanceof Integer) {
    
    
			int num = (int)object;
			return ++num;
		}else {
    
    
			String error = "传入的参数不是整数类型";
			MyNumberException myNumberException = new MyNumberException(error);
			throw myNumberException;
		}
	}
}

추천

출처blog.csdn.net/qq_40220309/article/details/105623732