생각기록

2023-03-02 java 예외 처리 / try-catch-finally 본문

SeSAC 풀스택/JAVA &Spring boot

2023-03-02 java 예외 처리 / try-catch-finally

끼록관 2023. 3. 2. 16:13

예외 처리

 

컴파일 오류와 다름!

• 컴파일 오류는 문법에 맞지 않게 작성된 코드가 있을 때 발생

• 컴파일 할 때 발견되기 때문에 코드가 실행조차 되지 않음.

빨간줄은 컴파일 오류라 프로그램이 실행조차 되지 않는다.

 

• 예외란 프로그램 실행 중에 의도치 않는 결과가 나오는 것을 의미

• 예외란 프로그램 실행 중에 의도치 않는 결과가 나오는 것을 의미

 

하지만 예외는 프로그램이 실행하는 도중에 발생해서 생기는 오류입니다.

그런 예외을 방지하고 자하는 것이 예외처리라고 합니다.

예외가 발생 / 실행 전에는 모르기때문에 실행은 됨

 

• 숫자를 0 으로 나누는 경우 (ArithmeticException)

• 배열의 인덱스 범위를 벗어나는 경우 (ArrayIndexOutOfBoundsException)

• 정수를 입력받도록 작성한 코드에 문자열을 입력한 경우 (InputMismatchException)

• import 필요

• import java.util.InputMismatchException;

• …etc

 

 

해결법

try-catch-finally

문법

 

try안에는 예외 발생 가능성있는 실행문

catch문은 발생햇을때 실행문

finally 예외 발생여부 상관없이 무조건 발생하도록

 


0을 나눌때 예외처리 예시

Exception in thread "main" java.lang.ArithmeticException: / by zero

at java_first_project.Main.main(Main.java:14)

 

이런오류가 뜬다 

 

예외처리 방법 > 아까 오류창에 떳던 부분의 ArithmeticException e 을 catch문에 넣기

 


정수를 입력받도록 작성한 코드에 문자열을 입력한 경우 (InputMismatchException)

 

Exception in thread "main" java.util.InputMismatchException

친절하게 import하라고 쓰여있다

catch문에서 InputMismatchException e 추가

package java_first_project;

import java.util.Scanner;
//  java.util.InputMismatchException 임포트하라고 오류에서 쓰여있다.
import java.util.InputMismatchException;

public class Main {
	
	
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		
		// num에서 정수를 저장해야하는데 문자열을 저장해서 생기는 오류
//		int num = scanner.nextInt();
//		System.out.println(num);
		
		try {
			int num = scanner.nextInt();
			System.out.println(num);
			// 만약 숫자외에 것이 들어오게된다면 catch문
		} catch (InputMismatchException e) {
			System.out.println("숫자를 입력해주세요.");
		} 
		
		scanner.close();
		
	}
}

 


예외처리 실습

package java_first_project;

import java.util.Scanner;
//import java.util.ArrayList;
import java.lang.ArrayIndexOutOfBoundsException;

public class Main {
	
	
	public static void main(String[] args) {

		Scanner scanner = new Scanner(System.in);
		int [] intArr = {1, 2, 3, 4};
		
		
//		for( int i=0; i < 5; i++) {
//			System.out.println( intArr[i] + " ");
//		}
//		
		
		try {
			for( int i=0; i < 5; i++) {
				System.out.println( intArr[i] + " ");
			}
			// 예외처리
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("인덱스가 범위를 벗어났습니다.");
		} 
		
		scanner.close();
	}
}