일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 반복문
- java
- 식별자
- 이클립스 설치
- StringBuffer
- 친절한 SQL 튜닝
- join
- 논리 연산자
- 상속
- 친절한 SQL
- 산술 연산자
- SQL
- 연산자
- 오버라이딩
- 함수
- SQL 튜닝
- 객체
- 자바의정석
- 예약어
- SpringSecurity 로그아웃
- 오버로딩
- 인텔리제이 Web 애플리케이션
- 배열
- @PreAuthorize("isAuthenticated()")
- SQL튜닝
- SpringSecurity 로그인
- 비교 연산자
- 객체지향
- 스프링시큐리티 로그아웃
- spring 게시판 삭제
- Today
- Total
gi_dor
[Java] CH8 예외처리 본문
프로그램오류
1 ) 프로그램 실행중 비정상적으로 종료 , 오작동 하는 경우를 프로그램 에서 에러 또는 오류 라고한다
2 ) 1️⃣ 컴파일 에러 : :소스코드가 컴파일 되는 과정 중에 발생하는 에러 ✔ 생략코드 , 오타 대문자,소문자
2️⃣ 런타임 에러 : 실행시 발생되는 모든 에러
3️⃣ 논리적에러 : 실행은 되지만 작성한것과는 다른 결과로 작동함
- 컴파일 에러
- 런타임 에러
① Error : 심각 Out Of Memory
② Exception : 덜 심각
◽ Exception의 자손 checked ← 필수 처리 - 사용자의 실수
◽ RuntimeException 의 자손 unchecked ← 선택 처리 - 프로그래머의 실수
Null Point Exception , Array Index Out Of Bounds Exception
- 논리적 에러 : 의도한 대로 동작하지 않음 - 프로그램이 작동하는데 비정상적인 결과를 보여줌
◾ Exception
◽ IOException - 입력 출력 Input , Output
◽ ClassNotFoundException - class 파일이 존재 하지않음
◽ RuntimeException - 선택 처리
◽ ArithmeticException - 산술계산
◽ ClassCastException - 형변환
◽ NullPointerException - 널포인터
◽ IndexOutOfBoundsException - 배열 범위를 벗어남
3 ) Java에서 런타임 에러
1️⃣ 에러 : 심각한 오류
2️⃣ 예외 : 덜심각한 오류
Exception 클래스 와 그 자손들 ▶ 사용자 실수
- IOException : 입력 출력 에러 Input Output
- ClassNotFoundException : 클래스 파일 존재 유무 에러 // (*.class)
RutimeException 클래스와 자손들 ▶ 프로그래머 실수
- ArithmeticException : 산술계산 에러 Ex. 5/0 17/0 ... 0 으로 나누기
- ClassCastException : 형변환
- IndexOutOfBoundsException : 배열의 범위를 벗어남
예외 처리
▶ 프로그램 실행시 발생할수 있는 예외에 대비한 코드
🔑 프로그램의 비정상 종료 막고 , 정상적인 실행상태 유지
- try - catch (직접 처리)
- 예외 선언 ( 보고 )
- 호출한 메서드와 호출된 메서드 양쪽에서 예외 처리
- 은폐
printStackTrace() 와 getMessage ()
◾ printStackTrace() 예외 발생 당시 호출스택에 있던 메서드 정보와 예외 메시지 출력
◾ getMessage() 발생한 예외 클래스의 인스턴스에 저장된 메시지 출력
try - catch 예외처리
▶ 예외 처리 : 예외 발생에 대한 코드를 작성
▶ 그래서 왜 쓰는데 ?? 비정상적 종료를 막고 정상적인 실행 상태를 유지함
try {
// 예외 발생가능성 있는 문장
} catch ( Exception1 e) {
// Exception1 발생할 경우 처리할 문장
} catch (Exception2 e) {
// Exception2 발생할경우 처리할 문장
}
1️⃣ try 블랙내에 예외가 발생
1 ) 발생한 예외와 일치하는 catch 블럭 확인
2 ) catch 블럭 문장 수행후 전체 try - catch 문 빠져 나간뒤 다음문장 수행
3 ) 일치하는 catch 블럭 못찾을 경우 예외 처리 못함
+ ) catch블럭이 여러개일경우 해당하는 catch 블럭만 수행후 빠져나옴
2️⃣ try 블럭내에 예외가 발생하지 않은경우
catch 블럭을 건너뛰어서 전체 try - catch 문을 빠져 나가서 수행을 계속 함
System.out.println(1);
try {
System.out.println(2);
System.out.println(3);
}catch (Exception e) {
System.out.println(4);
}
System.out.println(5);
System.out.println();
System.out.println("기본판 예제 8 - 2");
System.out.println(11);
try {
System.out.println(13/0); // 예외 발생 try 문 빠져나와서 catch 찾기
System.out.println(12);
}catch (ArithmeticException ea) { // catch 문 찾음
// 블럭내 문장 수행후 빠져 나가서 계쏙 수행
System.out.println(14);
}
System.out.println(15);
예외 선언하기
◾ 메서드가 호출시 발생가능한 예외를 호출한 쪽에 알리기
◾ 예외 선언은 checked 만 적는것이 정석
throw : 예외 발생 키워드
throws : 예외 선언 키워드
예외 되던지기
◾ 예외 처리 한 후에 다시 예외 발생시킴
◾ 호출한 메서드와 호출된 메서드 양쪽에서 예외 처리
예외 발생시키기
◾ 발생시키려는 예외 클래스의 객체를 만든다
Exception e = new Exception(" 고의로 발생 시킴 ")
◾ 키워드 throw를 이용해서 예외 발샐시킨다
throw e;
try {
Exception e = new Exception (" 123 ");
throw e ;
// throw new Exception ("123");
} catch ( Exception e ){
System.out.println("에러 메세지 : "+ e.getMessage() );
e.printStackTrace();
}
System.out.println("종료 되었습니다");
}
finally 블럭
◾ 예외의 발생여부에 상관없이 실행되야 하는 코드
◾ try 나 catch 블럭의 문장 수행중에 return 문을 만나도 finally 문장들은 수행된다.
연결된 예외
◾ 예외 A가 예외 B를 발생시키면 A는 B의 원인 예외
◾ A 와 B를 연결하는 것을 연결된 예외 라고 한다.
멀티 catch블럭
✔ 내용이 같은 catch 블럭을 하나로 합침
try {
System.out.println(1);
} catch ( Exception1 e) {
e. printStackTrace(); // 내용 같음
} catch ( Exception2 e2) {
e2. printStackTrace ( ) ; // 내용 같음
} // 중복을 제거 하기 위해 멀티 catch 사용
try {
System.out.println(1);
} catch ( Exception1 | Exception2 e ) {
e.printStackTrace ( );
}
- 부모 자식 관계의 예외 클래스는 에러 ▶ 그냥 조상 클래스 사용
- | 기호
- 예외를 멀티 catch블럭으로 처리할 때 , 멀티 catch 블럭내에 실제로 어떤 예외가 발생한것인지 알수 없음
'First > Java' 카테고리의 다른 글
[Java] CH9 java.lang패키지와 클래스 (0) | 2023.04.08 |
---|---|
[Java] Comparator - compare(o1,o2) , Comparable - compareTo(o) , HashSet,TreeSet (0) | 2023.04.05 |
[Java] 6장 QUIZ (0) | 2023.03.21 |
[Java] CH7 객체지향 개념 (0) | 2023.03.20 |
[Java] CH6 객체지향 개념 (0) | 2023.03.13 |