본문 바로가기

2023.11.21-2024.05.31

231226 JAVA Exception01

package com.sukgi.exception;

 

//익셉션 예외

//예외, 오류, 핸들링, try, catch, finally

/*

* 444p

* 자바에서는 예외라는 것을 두고 목적에 따라서 핸들링(처리)하도록 되어있습니다.

*

* 예외는 주로 실행시에 발생되는 모든 에러상황을 예외로 정의합니다.

* 물론 특정 API는 컴파일시 예외를 처리하지 않으면 컴파일이 되지 않는

* 예외들도 있습니다.

*

* 예외의 정의

* 실행시에 발생할 수 있는 모든 에러 상황으로 알아두세요.

*

* 예외가 발생되는 순서

*

* 컴파일 ->실행 ->실행중 예외 발생 -> VM이 발생된 예외의 종류/내용 파악 ->

* 예외객체를 생성 -> 발생된 코드 밖으로 외예 객체를 던짐(throw)->

* 예외의 콜 스택에 전이 -> main 메소드 밖까지 던지게 되면

* 프로그램 비정상 종료

*

* 위에서 보듯, 예외는 던지다라고 표현합니다.

* 또한 예외는 객체이기 때문에 당여한 클래스로 정의되어 있습니다.

*

* 예외의 최고 클래스는 lang 패키지에 Throwable입니다.

* 자식으로는 Error와 Exception이 있습니다.

* Error의 하위 타입은 일반적으로 JAVA 실행기 즉, JVM에 관련된 에러 상황을

* 정의한 클래스 입니다.

* 이런 문제(상황)들은 프로그래머가 처리할 수 없는 것들로 VM, JRE의 전체

* 문제이기도 합니다.

* 따라서 프로그래머는 Error의 하위 타입의 예외들(에러)은

* 처리하지 않고 무시합니다.

* (처리할 수도 없습니다)

*

* Execption이란 클래스의 하위타입이 바로 프로그래머가 처리할 예외타입입니다.

* 그렇기에 예외다 하고 표현할 때 최고 클래스로는 Exception클래스를 말합니다.

* Throwable 클래스는 자식으로 Error를 가지고 있기 때문에

* 예외의 최고 클래스라고 이야기 하지 않습니다.

*

* 예외의 종류

*

* 크게 두가지로 나눌 수 있습니다.

* 컴파일러가 관여하지 않으면서 실행시에 예외가 발생할 수 있는 예외

* ----> 알려지지 않은 예외(Unchecked Exception)

*

* 컴파일러가 관여하는 예외

* ----> 알려진 예외(Checked Exception)으로 구분합니다.

*

* 구분 방법은 Exception의 하위 클래스 중 RuntimeException이 있는데

* 해당 클래스의 자식 클래스들은 모두 알려지지 않은 예외입니다.

* 나머지는 알려진 예외입니다.

*

*/

 

 

public class Exception01 {

public static void main(String[] args) {

 

System.out.println("프로그램 시작");

System.out.println("중간 로직");

int num = 10;

int num2 = 0;

try {

System.out.println(num/num2);

//예외가 발생할 것 같은 문장;

} catch (Exception e) {//최상위 익셉셕

//혹시 예외가 발생했다면 처리할 문장;

System.out.println("예외가 발생했습니다.");

}

 

 

int arr[] = new int[] {10,20,30};

System.out.println(arr[0]);

System.out.println(arr[1]);

System.out.println(arr[2]);

 

 

try {

System.out.println(arr[2]);

System.out.println("패스");

System.out.println(10/0);//배열 관련된 내용이 아니기때문에 아래 catch로는 처리를 못한다.

} catch (ArrayIndexOutOfBoundsException e) {

//배열 길이 밖으로 나가는 익셉셕 처리

System.out.println("배열 길이 밖으로 나갔어요");

} catch (ArithmeticException e) {

System.out.println("0으로 나누고 있어요!");

}

 

System.out.println("프로그램 끝");

}

}

 

프로그램 시작

중간 로직

예외가 발생했습니다.

10

20

30

30

패스

0으로 나누고 있어요!

프로그램 끝

'2023.11.21-2024.05.31' 카테고리의 다른 글

231226 JAVA Exception03  (0) 2023.12.26
231226 JAVA Exception02  (0) 2023.12.26
231226 JAVA Study  (0) 2023.12.26
231221 JAVA Test02  (1) 2023.12.26
231221 JAVA Test02  (0) 2023.12.26