문서의 이전 판입니다!
try ~catch문의 구조
try {
// 예외가 발생할 가능성이 있는 문장 코드
} catch (Exception1 e1) {
// Exception1이 발생할 경우, 실행될 문장
} catch (Exception1 e2) {
// Exception2이 발생할 경우, 실행될 문장
...
} catch (ExceptionX eX){
// ExceptionX가 발생할 경우, 실행될 문장
}
package chapter11;
public class ExceptionEx0 {
public static void main(String[] args) {
System.out.println(1);
System.out.println(2);
System.out.println(3/0);
System.out.println(4);
System.out.println(5);
System.out.println(6);
}
}
package chapter11;
public class ExceptionEx {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3/0);
System.out.println(4);
} catch(ArithmeticException e) {
System.out.println(5);
}
System.out.println(6);
}
}
| try 블록 안에서 예외가 발생한 경우 |
|---|
| - 발생한 예외와 일치하는 catch 문이 있는지 확인한다. |
| - 만약 일치하는 catch문이 있다면, 해당 catch문의 블럭 내의 실행문을 실행하고 전체 try-catch 구문이 종료된다. 만약 일치하는 catch문이 없으면 예외 처리를 하지 못한다. |
| try 블록 안에서 예외가 발생하지 않은 경우 |
| - catch 구문을 모두 확인하지 않고, 전체 try-catch 구문이 종료된다. |
package chapter11;
public class ExceptionEx2 {
public static void main(String[] args) {
System.out.println(1);
try {
System.out.println(2);
System.out.println(3);
System.out.println(4);
} catch(ArithmeticException e) {
System.out.println(5); // Death 코드 (실행될 일이 없다)
}
System.out.println(6);
}
}
다중 catch문
package chapter11;
public class ExceptionEx4 {
public static void main(String[] args) {
try {
int[] arr = {1,2,3};
System.out.println(arr[2]);
System.out.println(3/1);
Integer.parseInt("a");
} catch(ArithmeticException e) {
System.out.println("0으로 나눌 수 없음");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("인덱스 범위 초과");
}
}
}
| catch 문의 배치 순서 |
|---|
| 자식 Exception > Exception 순으로 배치 |
finally문
package chapter11;
public class ExceptionEx3 {
public static void main(String[] args) {
System.out.println("DB연결 시작");
try {
System.out.println("DB작업");
System.out.println(3/0);
} catch(Exception e) {
System.out.println("DB작업 중 예외발생");
} finally {
System.out.println("DB연결 종료");
}
}
}
| throw 키워드 사용 |
|---|
| throw new Exception( “ 예외 발생 ”); |
package chapter11;
public class ExceptionEx5 {
public static void main(String[] args) {
System.out.println("프로그램 시작");
try {
throw new Exception("예외 발생");
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("프로그램 종료");
}
}
메서드에서 예외 선언
void 메서드명() throws Exception1, Exception2... {
...
}
package chapter11;
public class ExceptionEx6 {
public static void main(String[] args) {
try {
first();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
static void first() throws Exception {
second();
}
static void second() throws Exception {
throw new Exception("예외 발생");
}
}
예외 재발생
package chapter11;
public class ExceptionEx7 {
public static void main(String[] args) throws Exception {
try {
first();
} catch (Exception e) {
System.out.println("main() 예외 처리");
System.out.println(e.getMessage());
throw e;
}
}
static void first() throws Exception {
try {
second();
} catch (Exception e) {
System.out.println("first() 예외 처리");
throw e; // 예외 재발생
}
}
static void second() throws Exception {
try {
throw new Exception("예외 발생");
} catch (Exception e) {
System.out.println("second() 예외 처리");
throw e; // 예외 재발생
}
}
}
public static void main(String[] args) throws Exception {
try {
first();
}
catch (Exception e) {
System.out.println("Main() 예외 처리");
System.out.println(e.getMessage());
throw e;
}
}
class 클래스명 extends Exception {
클래스명 (String msg) {
super(msg);
}
}
LoginException.java
package chapter11;
public class LoginException extends Exception {
LoginException(String msg) {
super(msg);
}
}
ExceptionEx8.java
package chapter11;
import java.util.Scanner;
public class ExceptionEx8 {
static String user_id = "seo";
static String user_pw = "smg1234";
public static void main(String[] args) throws Exception {
try {
Scanner scan = new Scanner(System.in);
System.out.print("아이디 : ");
String input_id = scan.nextLine();
System.out.print("비밀번호 : ");
String input_pw = scan.nextLine();
if (!user_id.equals(input_id)) {
throw new LoginException("아이디가 올바르지 않습니다.");
} else if (!user_pw.equals(input_pw)) {
throw new LoginException("비밀번호가 올바르지 않습니다.");
} else {
System.out.println("로그인 성공");
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
try-with-resource
기존 try~catch 방식
FileInputStream is = null;
BufferedInputStream bis = null;
try {
is = new fileInputStream("파일명")
bis = new BufferdInputStream(is);
int data = -1;
while((data = bis.read()) !=-1){
System.out.print((char)data);
}
} finally {
// close 메서드 호출
if ((is != null) is.close();
if (bis != null) bis.close();
}
try-with-resource 방식
try(
FileInputStream is = new FileInputStream("파일명");
BufferedInputStream bis = new BufferdInputStream(is)
) {
int data = -1;
while ((data = bis.read()) != -1) {
System.out.print((char) data);
}
} catch (IOException e) {
e.printStackTrace();
}
별도로 명시하지 않을 경우, 이 위키의 내용은 다음 라이선스에 따라 사용할 수 있습니다: CC Attribution-Share Alike 4.0 International