nme.kr

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
프로그램:java:ㄴhomework:book_source:ch11 [2022/01/04 16:59]
clayeryan@gmail.com
프로그램:java:ㄴhomework:book_source:ch11 [2023/07/13 17:29] (현재)
clayeryan@gmail.com ↷ 문서가 programmer:java:ㄴhomework:book_source:ch11에서 프로그램:java:ㄴhomework:book_source:ch11(으)로 이동되었습니다
줄 1: 줄 1:
-====== Chapter11 예외처리 ======+====== Ch.11 예외처리 ======
  
-==== 11.3 예외처리 ====+=====예외처리=====
  
 **try ~catch문의 구조** **try ~catch문의 구조**
줄 55: 줄 55:
 </code> </code>
  
-==== 11.예외 강제 발생 ====+^<color #00a2e8>try 블록 안에서 예외가 발생한 경우</color>
 +| - 발생한 예외와 일치하는  catch 문이 있는지 확인한다.
 +|- 만약 일치하는 catch문이 있다면, 해당 catch문의 블럭 내의 실행문을 실행하고 전체 try-catch 구문이 종료된다. 만약 일치하는 catch문이 없으면 예외 처리를 하지 못한다.| 
 +^<color #00a2e8>try 블록 안에서 예외가 발생하지 않은 경우</color>
 +| - catch 구문을 모두 확인하지 않고, 전체 try-catch 구문이 종료된다.|
  
-==== 11.5 예외 떠넘기기 ====+<code java> 
 +package chapter11;
  
-==== 11.6 사용자 정의 예외 클래스 ====+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);
 + }
 +
 +}
  
 +</code>
 +
 +:wr:<color #ff7f27>**다중 catch문**</color>
 +
 +<code java>
 +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("인덱스 범위 초과");
 + }
 + }
 +
 +}
 +
 +</code>
 +
 +^<color #00a2e8>catch 문의 배치 순서</color>^
 +|자식 Exception > Exception 순으로 배치|
 +
 +:wr:<color #ff7f27>**finally문**</color>
 +
 +<code java>
 +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연결 종료");
 + }
 + }
 +
 +}
 +
 +</code>
 +===== 예외 강제 발생 =====
 +
 +^<color #00a2e8>throw 키워드 사용</color>^
 +|throw new Exception( " 예외 발생 ");|
 +
 +<code java>
 +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("프로그램 종료");
 + }
 +
 +}
 +
 +</code>
 +
 +=====예외 떠넘기기=====
 +
 +**메서드에서 예외 선언**
 +  void 메서드명() throws Exception1, Exception2... {
 +  ...
 +  }
 +
 +<code java>
 +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("예외 발생");
 + }
 +
 +}
 +
 +</code>
 +
 +:wr:<color #ff7f27>**예외 재발생**</color>
 +
 +<code java>
 +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; // 예외 재발생
 + }
 + }
 +
 +}
 +
 +</code>
 +
 +<code java>
 + public static void main(String[] args) throws Exception {
 + try {
 + first();
 + }
 + catch (Exception e) {
 + System.out.println("Main() 예외 처리");
 + System.out.println(e.getMessage());
 + throw e;
 + }
 +}
 +</code>
 +
 +
 +
 +
 +===== 사용자 정의 예외 클래스 =====
 +
 +  class 클래스명 extends Exception {
 +       클래스명 (String msg) {
 +             super(msg);
 +        }
 +   }
 + 
 +**LoginException.java**
 +
 +<code java>
 +package chapter11;
 +
 +public class LoginException extends Exception {
 +
 + LoginException(String msg) {
 + super(msg);
 + }
 +}
 +
 +</code>
 +
 +**ExceptionEx8.java**
 +
 +<code 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());
 + }
 +
 + }
 +
 +
 +}
 +</code>
 +
 +:wr:<color #ff7f27>**try-with-resource**</color>
 +
 +**기존 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();
 +  }
 +