JAVA 기초공부

JAVA - 예외처리, try - catch문

Dotae1 2025. 2. 17. 18:52

예외발생 경우

1. 없는 파일을 읽으려고 할 때

import java.io.*;

public class Sample {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader("나없는파일"));
        br.readLine();
        br.close();
    }
}

 

이 코드를 실행하면 존재하지 않는 파일을 열려고 시도했기 때문에 원하는 파일을 찾을 수 없다는 FileNotFoundException라는 예외가 발생한다.

2. 4 / 0 과 같이 연산할 수 없는걸 연산할 경우

public class Sample {
    public static void main(String[] args){
        int c = 4 / 0;
    }
}

 

4를 0으로 나눌 수가 없으므로 이와 같이 산술에 문제가 생겼다는 ArithmeticException 예외가 발생한다.

 

3. 배열의 인덱스 번호는 0부터 시작하기에 3은 빈자리이다.

public class Sample {
    public static void main(String[] args) {
        int[] a = {1, 2, 3};
        System.out.println(a[3]);
    }
}    

 

a[3]은 a 배열의 4번째 값이므로 a 배열에서 구할 수 없다. 그래서 배열에서 아무것도 없는 곳을 가리켰다는 ArrayIndexOutOfBoundsException 예외가 발생했다.

 

try - catch문 - 예외가 발생했을 때 처리하기 위해서 사용된다.

기본 구조

try {
<수행할 문장 1>;
    <수행할 문장 2>;
        ...
        } catch(예외1) {
<수행할 문장 A>;
        ...
        } catch(예외2) {
<수행할 문장 a>;
        ...
        }
public class Sample {
    public static void main(String[] args) {
        int c;
        try {
            c = 4 / 0;
        } catch(ArithmeticException e) {
            c = -1;  // 예외가 발생하여 이 문장이 수행된다.
        }
    }
}

4 /0은 ArithmeticException 예외가 발생하기에 catch문에 ArithmeticException  e를 통해 예외가 발생하면 c = -1이 수행된다.

 

finally - 예외가 발생하더라도 무조건 실행을 해야하는 문장이 있다면 finaly를 사용하면 된다.

public class Sample {
    public void shouldBeRun() {
        System.out.println("ok thanks");
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        int c;
        try {
            c = 4 / 0;
        } catch (ArithmeticException e) {
            c = -1;
        } finally {
            sample.shouldBeRun();  // 예외에 상관없이 무조건 수행된다.
        }
    }
}

 

'JAVA 기초공부' 카테고리의 다른 글

Jump to Java - 8장 프로그래밍 예제  (1) 2025.02.18
JAVA - static  (0) 2025.02.15
JAVA - 접근제어자  (0) 2025.02.15
JAVA - package  (0) 2025.02.15
JAVA - 콘솔 입출력  (1) 2025.02.06