///////
Search

예외처리

태그
장서윤
자바기초
작성일
2022/09/28

예외처리

: 예외가 발생했을때 try ~ catch 혹은 throws 둘중 하나를 처리해줘야한다.

예외 처리란?

에러와 예외는 다른 개념이다. 컴파일 에러가 아닌 다른 경우는 모두 예외로 처리한다 (언어마다 다르기 때문에)
에러 : 컴파일 오류, 문법의 오류
예외 : 프로그램(문법상)의 오류는 없으나 프로그램 실행과정 혹은 논리적으로 문제가 있는것 예) 나이를 입력하라고 했는데 0보다 작은 값이 입력되었다.
예외처리 : 자바는 예외처리 메커니즘을 제공

JVM 자바 가상머신

: 예외처리를 발생해야하는 상황을 감지 -> 예외처리를 할 수 있는 인스턴스 생성(예외클래스) -> 가상머신에 의해 생성된 인스턴스의 참조 값 전달

try ~ catch문

: try 영역에서 발생하는 에러는 catch에서 해결하겠다 : 코드를 한눈에 알아보기 쉽다
try : 예외 발생의 감지 대상을 감싸는 목적
catch : 발생한 예외상황의 처리를 위한 목적

try ~ catch 문법

하나의 try 블록에 둘 이상의 catch 블록을 구성할 수 있다. : catch 블록의 매개변수가 해당 예외 인스턴스의 참조 값을 받을 수 있는지 순서대로 확인하면서 내려온다
항상 실행되는 finally : try블록으로 일단 진입이 되면! 100% 실행! 만약 에러가 발생되지 않았다면 catch 넘어서 finally는 실행 중간에 return문을 실행하더라도 finally 블록이 실행된 다음에 메소드를 빠져나간다
try{ //아! 예외 발생 가능지역이구나! //정상적 영역 : try영역에서 발생한 예외상황은 일반적인 흐름이지만 예외가 발생할 수 있는 상황 }catch{ //아! 예외처리 코드이구나 //예외처리 : 이어서 등장하는 catch 영역에서 처리된다. }
Plain Text
복사
package com.codelion.day08; import java.util.InputMismatchException; import java.util.Scanner; public class Practice05 { public static void main(String[] args) { Scanner kb = new Scanner(System.in); try { System.out.print("a/b... a? "); int n1 = kb.nextInt(); System.out.print("a/b... b? "); int n2 = kb.nextInt(); System.out.printf("%d / %d = %d \\n", n1, n2, n1 / n2); } catch (ArithmeticException e) {//1 e.printStackTrace(); System.out.println(e.getMessage()); } catch (InputMismatchException e) {//2 e.printStackTrace(); System.out.println(e.getMessage()); //------------------- } catch (Exception e) {//전체를 포괄하여 예외처리를 할 경우 e.printStackTrace(); System.out.println(e.getMessage()); } finally { System.out.println("무조건 실행"); } System.out.println("Good bye~~!"); } }
Plain Text
복사
1번과 2번 에러 이외의 예외사항이 발생할 경우 위에서 부터 찾는것 catch문
만약 Exception을 최상단에 적고 그 하위 예외 클래스를 정의할 경우 아래의 캐치문을 탈 일이 없기 때문에 데드코드가 된다.

e.getMessage()

ArithmeticException 클래스와 같이 예외 상황을 알리기 위해 정의된 클래슬르 가리켜 예외 클래스라고 한다.
모두 예외 클래스는 throwable 클래스를 상속하며, 이 클래스에는 getMessage 메소드가 정의되어 있다. : 예외클래스는 모두 throwable을 참조하고 있기 때문에 getMessage를 가지고 있다.
getMessage 메소드는 예외가 발생한 원인정보를 문자열의 형태로 반환해준다

throws

: 예외처리를 호출한 함수한테 맡긴다 : JVM에 해당에러를 던지겠다 (JVM이 에러 메시지를 띄우고 프로그램을 종료하는 것)
에러처리 방법은 try ~ catch, throws가 있다
package com.codelion.day08; import java.io.FileReader; import java.io.IOException; public class Practice05Throws { public static void main(String[] args) throws IOException { byte[] byteArr = {'a', 'b', 'c'}; System.out.write(byteArr); FileReader fr = new FileReader("test.txt"); fr.read(); } }
Plain Text
복사