오답노트

[Java] 예외 처리 본문

Java

[Java] 예외 처리

권멋져 2023. 7. 10. 15:29

예외 처리

예외 처리를 통해 프로그램의 비정상 종료를 피하여 시스템이 원할이 실행되도록한다. 그리고 log를 남겨 추후 log 분석을 통해 그 원인을 파악하여 bug를 수정하는 것이 중요하다.

 

try - catch - finally

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileExceptionHandling {

	public static void main(String[] args) {

			
		FileInputStream fis = null;
		try {
			fis = new FileInputStream("a.txt");
			System.out.println("read");
			
		
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			if(fis != null) {
				try {
					
					fis.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		System.out.println("finally");
		}
	System.out.println("end");

	}
}

try 문에서 발생된 예외는 모두 catch로 빠지게 된다.

그리고 finally는 try 또는 catch가 끝난 후 무조건 실행된다.

 

try - with - resources

Javs는 입출력스트림을 사용할 때, close를 호출하지 않아도 자동으로 해제 되도록하는 인터페이스가 있다.

이것을 사용하려면 try()에 입출력스트림을 선언하면 코드가 정상 작동하던 오류가 발생하던 close를 호출한다.

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class FileExceptionHandling {

	public static void main(String[] args) {

	try(FileInputStream fis = new FileInputStream("a.txt")){
		System.out.println("read");
	} catch(FileNotFoundException e) {
		e.printStackTrace();
	} catch (IOException e1) {
		// TODO Auto-generated catch block
		e1.printStackTrace();
	}
	
	System.out.println("end");
	
	}
}

Multi catch exception

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ThrowsExeption {
	public Class loadClass(String fileName, String className) throws FileNotFoundException, ClassNotFoundException {
		FileInputStream fis = new FileInputStream(fileName);
		Class c = Class.forName(className);
		return c;
	}

	public static void main(String[] args) {
		ThrowsExeption test = new ThrowsExeption();
		
		try {
			test.loadClass("a.txt", "abc");
		} catch (FileNotFoundException | ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		System.out.println("end");

	}

}

 

Exception 클래스를 사용한 예외처리

Exception 클래스는 모든 예외처리의 최상위 클래스이다. 원인을 정확하기 파악할 수 없다면 일단 사용할 수 있지만, catch문 중에 가장 상위에 사용할 수 없다. 그렇다면 아래 catch문으로 내려오지 않기 때문이다.

 

import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class ThrowsExeption {
	public Class loadClass(String fileName, String className) throws FileNotFoundException, ClassNotFoundException {
		FileInputStream fis = new FileInputStream(fileName);
		Class c = Class.forName(className);
		return c;
	}

	public static void main(String[] args) {
		ThrowsExeption test = new ThrowsExeption();
		


			try {
				test.loadClass("a.txt", "abc");
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (Exception e) {
				e.printStackTrace();
			}

		
		System.out.println("end");

	}

}

'Java' 카테고리의 다른 글

[Java] IOStream  (0) 2023.07.10
[Java] 사용자 정의 예외 처리  (0) 2023.07.10
[Java] 스트림  (0) 2023.07.10
[Java] 람다식  (0) 2023.07.10
[Java] 지역 내부 클래스와 익명 내부 클래스  (0) 2023.07.10