예외 / 예외 클래스
오류의 종류
- 에러 : 하드웨어의 잘못된 동작, 고장으로 인한 오류로 에러 발생되면 프로그램이 종료되고 정상 실행 상태로 돌아갈 수 없음
- 예외 : 사용자의 잘못된 조작, 코딩으로 인한 오류로 예외가 발생되면 프로그램이 종료됨
Exceotion 일반 예외 (컴파일오류)
Runtime Exception 실행 예외 (예외 처리코드를 생략하더라도 컴파일은 되지만 예외임)
Exception 클래스 예외 (사용자가 발생하는 예외)
- FileNotFoundException
- 존재하지 않는 파일의 이름을 입력
- ClassNotFoundExxeption
- 클래스의 이름을 잘못 적은 경우
- DataFormatException
- 입력된 데이터 형식이 잘못된 경우
실행 예외 (프로그래머의 실수로 발생하는 예외)
- NullPOinterExceptionnull 객체 잠조가 없는 상태
값 갖는 참조변수로 객체 접근 연산자인 도트 (.) 사용했을 때 발생함 - ArrayIndexOutOfBoundsException 인덱스 범위를 초과했을 경우
- ClassCastException 강제변환
타입변환 전에 타입변환이 가능한지 instanceof 연산자로 확인하는 것이 좋음! (true이면 좌향객체를 우향타입으로 변환 가능) - NumberFormatException
숫자가 실행되지 않을 때 (공백,빈칸 모두 포함해서 온전한 숫자만 허용)
예외 처리 코드(try-catch)
(try - catch - finally ) : 예외가 발생될 수 있는 모든 곳에 작성하는 것이 원칙
(try - catch - return )
return; 이 없으면 예외발생 후 catch값 출력 후 프로그램이 종료되지 않고 밑의 코딩까지도 계속 실행이 됨
catch 에는 try에서 발생하는 예외클래스명이 함께 들어가야 함
정확한 클래스를 모른다면 Exception 만 넣어줘도 가능은 함 (최상위 클래스)
[try 블럭 내에서 예외가 발생한 경우]
- 발생한 예외와 일치하는 catch 블럭이 있는지 확인
- 일치하는 catch 블럭을 찾게되면 그 catch 블럭 내의 문장들을 수행하고 전체 try-catch 문을 빠져나가서 그 다음 문장을 계속하여 수행 (일치하는 catch 블럭을 찾지 못하면, 예외는 처리되지 못함! )
예외가 발생하면 발생한 예외에 해당하는 클래스의 인스턴스가 만들어짐
예외가 발생한 문장이 try 블럭에 포함되어 있다면, 이 예외를 처리 할 수 있는 catch 블럭을 찾게됨
첫번째 catch블럭부터 차례로 내려가면서 catch 블럭의 괄호내에 선언된 참조변수의 종류와 생성된 예외클래스의 인스턴스에 instanceof연산자를 이용해서 검사하고 결과가 true 이면 예외처리를 한다.
검사결과가 true인 catch 블럭이 하나도 없으면 예외는 처리되지 않는다.
[try 블럭 내에서 예외가 발생하지 않은 경우]
catch 블럭을 거치지 않고 전체 try-catch문을 빠져 나가서 수행을 계속함
다중 catch
발생되는 예외별로 예외 처리 코드를 다르게 하기 위해
catch의 순서
상위 클래스가 위에 위치해야함 (위에서 부터 차례로 진행되는 예외별로 순서대로)
exception을 사용할 시에는 단독으로 사용하거나 맨 끝에 사용할 것
멀티 catch ( | 기호를 사용해 합치는 )
하나의 catch 블록에 적을시에는 괄호 안에 동일하게 처리하고 싶은 예외를 | 로 연결 할 것
기호로 연결할 수 있는 예외클래스의 개수에는 제한이 없다.
*조상과 자손의 관계에 있는 catch 블럭을 멀티 catch 블럭으로 합칠 수 없다. 공통멤버만 사용할 수 있다.
getMessage()
: 발생한 예외 클래스의 인스턴스에 저장된 메시지를 얻을 수 있다.
예외가 발생하면 예외객체가 만들진다.
발생한 예외객체를 catch 블럭의 참조 변수로 접근할 수 있다.
자동 리소스 닫기
리소스 : 데이터를 읽고 쓰는 객체
close() 메소드를 호출해서 안전하게 리소스를 닫음
예외 발생 시키기 _ throw
throw를 사용해 프로그래머가 예외를 발생시킬 수 있다.
- new 이용해 발생시키려는 예외 클래스의 객체를 만듬
- Exception e = new Exception
- 키워드 throw를 이용해서 예외를 발생시킴
- throw e;
Exception 인스턴스를 생성할 때 생성자에 String 넣어주면, String이 Exception인스턴스에 메시지로 저장됨
메예외 떠넘기기
메소드에 예외 선언하기 _throws
메소드를 호출한 곳으로 예외를 떠넘길 수있는데, 그때 throws를 사용함
메소드 선언부() 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할이며, 쉼표로 구분해서 나열해줌
use : (메소드를 만들때 생성하거나/ 가져다 쓸때 생성하거나)
모든 예외를 떠넘기기 위해
Finally 블럭
예외의 발생 여부와 관계없이 실행 되어야 하는 코드를 넣음
선택적 사용이 가능하며 try → catch → finally 순서로 실행되고 예외 미 발생시에는 try→ finally
사용자 정의 예외 클래스
기존의 예외 클래스를 상속 받아서 새로운 예외 클래스를 정의할 수 있음 ( 보통 Exception or RuntimeException 클래스를 상속 받음)
'Java' 카테고리의 다른 글
자바 인터페이스 / (1) | 2023.10.03 |
---|---|
자바 상속 / 타입변환 / 다형성 (1) | 2023.10.03 |
자바 객체 지향 클래스 / 메서드 / 생성자 /클래스 상속 (0) | 2023.10.03 |
자바 참조타입 / 배열 / (1) | 2023.10.03 |
자바 If , swith 조건문/ for , while , do-while , break , continue반복문 / Java If (0) | 2023.10.03 |