※ 개인적인 개발 수업 정리글입니다. 꾸준히 정리할 예정이고 틀린 부분이 있다면 언제든지 댓글 환영입니다.
9장. 예외처리 Exception
★발견한 예외를 수정하는건 내가 하는거고!!!! 예외처리는 어디서 예외가 왜 발생했는지 알려주는거임!!!!
-ArithmeticException : 0으로 나누는 경우에 발생됨.
=> if문과 같은 조건문으로 먼저 나누는 수가 0인지 체크하면 예외발생 방지가능.
-NullPointerException : null값을 가진 참조변수로 객체 멤버 접근시 발생됨.
=> 객체를 접근하기 전에 참조변수가 null인지 체크하면 예외발생 방지가능.
-ArrayIndexOutOfBoundsException : 배열의 index범위를 넘어서 참조하는 경우.
=> 배열의 길이를 먼저 체크하고 참조하면 예외발생 방지가능.
-ClassCastException : 형변환 연산자 사용시 타입이 일치하지 않는 경우 발생됨.
=> 형변환하기 전에 instanceof 연산자를 사용하여 객체타입확인후 형변환하면 예외발생 방지가능.
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
이 모든 예외처리를 하기 위해서 예외클래스, try-catch-finally문, throws 사용
try {
이런 예외가 발생할거야 =>여기 짱 길음
}
catch 잡아 ( 예외클래스 변수명 ) { 잡은걸 이렇게 해 }
문장1 ①
try { 문장2 ②
예외발생코드 // int num = 3/0 ; //ArithmeticE 발생
문장3 X
} catch (예외클래스명 변수명 ) { // ArithmeticE가 뜨면 e이라는 이름으로 이용.
예외처리코드 ③ // 이렇게 할거임. 보통 출력문
}
문장4 ④
< 다중 try-catch 문 >
try {
//예외발생할만한 코드1
//예외발생할만한 코드2
} catch (예외클래스명1 변수명 ) { // 예외클래스명1 작은 타입을 먼저 써줘야함
//예외처리코드
} catch (예외클래스명2 변수명 ) { // 예외클래스명2 큰 타입을 나중에 써줘야함
//예외처리코드
}
- if ( 변수 instanceof 클래스명1) {... <=instanceof 때처럼 작은 타입을 먼저 써줘야함
try-catch문
(예제)
프로젝트 11Day0의 클래스 ExceptionTest4
프로젝트 11Day0의 클래스 ExceptionTest5
try-catch문 + try-catch문 해서 예외처리 잡기
■ finally 문
-try-catch문 마지막에 넣어서, 사용했던 외부자원을 돌려줘서 해제하는 작업.
- 예외발생 여부와 상관없이 돌려줘야함
- 생략되기도 함.
-try에 예외들을 다 몰아서 넣으면 맨 처음에 터졌을때 그 아래는 실행이 안될때 이건 꼭 써라~ 이런거.
프로젝트 11Day0의 클래스 ExceptionTest6
■ throws / throw
throws : Exception 처리를 내가 하지 않고 위임함. -나를 호출한 함수에게 처리를 위임
ex) public static a( ) throws Exception { ~ } // 보통 함수( ) 뒤에 씀
throw : Exception을 개발자가 강제로 발생시에 사용하는 키워드.
ex) if ( num<10) {
throw new Exception ("num이 10보다 작다") ;
}
ㄴ b( )에서 위임되어서 왔는데, a( )도 위임시켜서 main ( )으로 위임함
근데 main( )도 throws 달아서 jdk한테 위임시킬 수 있음.
jdk한테 위임 안할거면 main( )안에서 try-catch문 블럭을 꼭 잡아줘야함.
ㄴtry-catch문을 어디서 쓰는지에 따라 throws가 사용중단 되는지도 달라짐
ㄴthrows랑 trycatch문 같이 쓰면 상충되는건데도 에러가 뜨진 않음.
ㄴ이렇게 할땐 에러가 안 뜨고
컴파일 에러? 뭐 할때는 에러가 뜬다캄
┌ 위임되는 순서┐
만약, a( )에 trycatch문을 써버린다면???
*잠시 쉬는시간.. 후.. 열심히 캡쳐정리했다.
책246쪽
<오버라이딩 할때 제약조건>
-메서드 리턴타입이 반드시 동일해야 된다.
-상속관계인 경우에 작은 타입으로.
throws 예외클래스는 계층구조에서 같거나 작은 타입만 가능하다.
┌오버라이딩 할때 제약조건┐
프로젝트 11Day0의 클래스 ExceptionTest10
ㄴimport java.sql.SQLException; 임포트 하면 가능!
책248쪽
프로젝트 11Day0의 Ex09_7
만약 ' throws Exception '이 없다면 아래 에러가 뜨는데 Add하면 또 알아서 추가됨
*ExceptionTest11클래스. throws가 없어도 런타임 계열은 묵시적으로 실행이 됨
■ 사용자 정의 예외클래스★꼭 기억하기★
- 시스템이 제공하는 예외클래스 말고도,
개발자 기준으로 '변수가 이거면 예외로 지정~'해서 쓸 수 있게 하기 위해서.
1. 반드시 Excepton 클래스를 상속extends 해야하며.
2. 일반적으로 문자열을 저장할 수 있는 생성자를 구현.
3. 문자열은 super를 이용해서 Exception 클래스에서 초기화.
┌클래스 생성 ┐ ┌Exception계열의 클래스가됨
public class UserException extends Exception {
public UserException( String mesg ) { //생성사생성
super( mesg ); └받아온걸①
} └Exception클래스까지 전달시킴②
}
┌프로젝트 11Day0의 Ex09_8클래스┐
ㄴ사용자가 지정한 조건에 위배되는 경우임.
┌프로젝트 11Day0의 ExceptionTest12┐
ㄴmain함수가 UserException 타입으로 받아서 예외잡고 출력
'Govern > Eclipse SE -상속,클래스,타입' 카테고리의 다른 글
07-27(화) ArrayList / HashMap (0) | 2021.07.27 |
---|---|
07-26(월) 2.제네릭/컬렉션/ Iterator (0) | 2021.07.27 |
07-23(금) 2.클래스들,Array API, 예외처리조금 (0) | 2021.07.27 |
07-23(금) 1.커플링 중첩클래스 (0) | 2021.07.23 |
07-22(목) 다형성 instanceof 추상클래스 인터페이스 (0) | 2021.07.22 |