DEV&OPS/Java
예외 처리
ALEPH.GEM
2022. 4. 6. 13:14
하드웨어 오동작이나 고장으로 인해 프로그램이 오류가 나는것을 에러라고 부르고
예외는 사용자의 잘못된 조작이나 개발자의 잘못된 코딩으로 인해 오류가 나는 것을 말합니다.
try catch finally
public class TryCatchFinally {
public static void main(String[] args) {
try {
String data1 = null;
String data2 = null;
data1 = args[0];
data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(result);
}catch(ArrayIndexOutOfBoundsException ae) {
System.out.println("실행 인수값의 수가 부족합니다.");
}catch(NumberFormatException ne) {
System.out.println("정수 변환에 실패했습니다.");
}catch(Exception e) {
//Exception 클래스는 모든 Exception 클래스들의 부모이기 때문에 다중 catch문에서는 제일 마지막에 배치 해야 함.
e.printStackTrace();
}finally {
System.out.println("다시 실행하세요.");
}
}
}
멀티 catch
public class MultiCatch {
public static void main(String[] args) {
try {
String data1 = null;
String data2 = null;
data1 = args[0];
data2 = args[1];
int value1 = Integer.parseInt(data1);
int value2 = Integer.parseInt(data2);
int result = value1 + value2;
System.out.println(result);
}catch(ArrayIndexOutOfBoundsException | NumberFormatException e1) {
System.out.println("실행 인수값의 수가 부족하거나 정수변환에 실패했습니다.");
}catch(Exception e) {
//Exception 클래스는 모든 Exception 클래스들의 부모이기 때문에 다중 catch문에서는 제일 마지막에 배치 해야 함.
e.printStackTrace();
}finally {
System.out.println("다시 실행하세요.");
}
}
}
자동 리소스 닫기
jdk7부터 try-with-resources 를 지원합니다.
이전 버전에는 finally 구분에서 열었던 리소스(입출력스트림,소켓,채널,DB연결 등)들을 일일이 close() 작업을 수동으로 해줬지만 이를 자동화 시킨 것입니다.
try-with-resources를 사용하기 위해서는 java.lang.AutoCloseable 인터페이스를 구현해야지 사용할 수 있습니다.
public class FileInput implements AutoCloseable {
private String file;
public FileInput(String file) {
this.file = file;
}
public void read() {
System.out.println(file+" 을 읽습니다.");
}
@Override
public void close() throws Exception {
System.out.println(file+ "을 닫습니다.");
}
}
public class TryWithResourceEx {
public static void main(String[] args) {
try(FileInput fis = new FileInput("file.txt")){
fis.read();
throw new Exception();
}catch(Exception e) {
System.out.println("예외가 발생했습니다.");
}
}
}
throws
throws 키워드를 통해 호출한 곳에 예외 처리를 넘길 수 있습니다.
public class ThrowsEx {
public static void main(String[] args) {
try {
findClass();
}catch(ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void findClass() throws ClassNotFoundException{
Class cl = Class.forName("java.lang.String2");
}
}
728x90