[자바] 예외처리 try - catch - finally, 객체로서의 예외

seulki·2022년 10월 11일
0

[java]

목록 보기
7/11
post-thumbnail

🗝️throw, throws 알아보러가기!

🗝️다중, 이중, 중첩 try - catch문 알아보러가기!



🎈 예외

  1. 예외란?
    프로그램 실행 중 발생하는 오류 중에서 처리가 가능한 것을 의미
  • 에러 : 개발자가 조취를 취할 수 없는 수준
    ex) 메모리 부족, JVM 동작 이상

  • 컴파일 에러 : 컴파일 시 발생하는 에러
    ex ) 오타, 잘못된 자료형 등

  • 런타임 에러 : 프로그램 실행 도중에 발생하는 에러
    ex) 배열에 할당된 크기를 넘어서 접근했을 때, 0으로 나눌 떄

  • 로직 에러 : 실행은 되지만 의도와는 다르게 동작하는 에러

  • 예외 : 다른 방식으로 처리 가능한 오류
    ex) 입력값 오류, 네트워크 문제



🎈 예외처리

예외 발생 시 적절하게 처리하기 위해, 자바에서 제공하는 예외처리 문법

[ try ~ catch문 ]

try{
	예외가 발생할 수 있는 명령;
} catch(발생할 수 있는 예외 클래스명){
	예외 발생 시 실행할 명령;
}

예시 1 ) 0으로 나눌 때 발생하는 에러 ArithmeticException

public static void main(String[] args) {

		
	try {
		int[] a = {2,0,0};
		int b = 4;
		int c = b/a[2];
		System.out.println(c);
	}catch ( ArithmeticException e) { //0으로 나눌 수 없을 때
		System.out.println("산술 오류 발생");
	}catch (ArrayIndexOutOfBoundsException e) { 
		System.out.println("배열 길이 오류 발생");
	}
	System.out.println("예외처리 공부 중");
}
  • 0으로 나눌 때는 ArithmeticException 에러가 발생한다.

예시 2 ) 배열의 index를 벗어났을 때 발생하는 에러 ArrayIndexOutOfBoundsException

public static void main(String[] args) {

		
	try {
		int[] a = {2,0};
		int b = 4;
		int c = b/a[2];
		System.out.println(c);
	}catch ( ArithmeticException e) { 
		System.out.println("산술 오류 발생");
	}catch (ArrayIndexOutOfBoundsException e) { 
    // 인덱스가 2인 값이 없을 때
		System.out.println("배열 길이 오류 발생");
	}
	System.out.println("예외처리 공부 중");

}
  • a배열의 index가 2인 값이 없을 때 발생하는 에러


[ try ~ catch ~ finally문 ]

try{
	예외가 발생할 수 있는 명령;
} catch(발생할 수 있는 예외 클래스명){
	예외 발생 시 실행할 명령;
} finally{
	예외가 발생하든 안하든 무조건 실행하는 명령;
}

예시

public static void main(String[] args) {

		
	int a= 0;
	int b = 2;
	try {
		System.out.println("외부로 접속");
		int c = b/a;
	} catch (ArithmeticException e) {
		System.out.println("오류가 발생하였습니다.");
	} finally {
		System.out.println("무조건 연결해제");
	}
	
	}
  • 0으로 나눠서 ArithmeticException 에러 발생
  • catch문 실행
  • 오류가 발생하든, 안하든 finally 문은 무조건 실행됨.


🎈 객체로서의 예외

  • 자바에서 예외는 Exception 클래스의 객체이다.
  • 자바는 객체지향 언어이기에 예외도 객체로 처리한다.
  • 모든 예외 클래스는 Exception 클래스를 상속받으므로
    Exception 클래스로 처리가 가능하다.
  • 예외 클래스들에서 Exception 클래스메서드를 사용할 수 있다.
    ex) getMessage(), toString(), printStackTrace()
public static void main(String[] args) {

		try {
			Exception e = new Exception("고의 예외"); 
			throw e; //고의로 예외를 던지겠다.
		} catch (Exception e) {
			System.out.println("예외 발생");
			System.out.println(e.getMessage());
		}
	}
  • Exception 객체 생성 후, Exception 클래스의 getMessage() 메서드 호출
  • exeption 생성자 호출 시 전달했던 문자열이 내부적으로 저장되어, 객체.getMessage()를 호출하면 출력된다.
profile
웹 개발자 공부 중

0개의 댓글