예외처리
프로그램 오류
프로그램 오류: 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비정삭적으로 종료되는 경우
-
컴파일 에러: 컴파일 시 발생하는 에러
-
런타임 에러: 실행 시에 발생하는 에러
-
논리적 에러: 실행은 되지만 의도와 다르게 동작하는 것
-
에러(error): 프로그램 코드에 의해서 수습될 수 없는 심각한 오류
-
예외(exception): 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
예외 클래스의 계층구조
- Exception 클래스 - IOException, ClassNotFoundException
- RuntimeException 클래스 - ArithemicExceptionm ClassCastException, NullPointException
Exception: 사용자 실수, try-catch 필수
RuntimeException: 프로그래머 실수, try-catch 필수 아님
예외처리하기 - try-catch문
예외처리
- 정의: 프로그램 실행 시 발생할 수 잇는 예외에 대비한 코드를 작성하는 것
- 목적: 프로그램의 비정상 종료를 막고 정상적인 실행상태를 유지하는 것
발생한 예외를 처리하지 못하면 프로그램은 비정상적으로 종료 -> JVM의 예외처리기가 받아 예외의 원인을 화면에 출력
tyr{
//예외가 발생할 가능성이 있는 문장들
}
catch(Exception e1){
//Exception1 발생했을 경우 이를 처리하기 위한 문장을 적는다
}catch(Exception e2){
//Exception2 발생했을 경우 이를 처리하기 위한 문장을 적는다
}catch(Exception e3){
//Exception3 발생했을 경우 이를 처리하기 위한 문장을 적는다
}
흐름
- try 블럭 내에서 예외가 발생한 경우
- 발생한 예외와 일치하는 catch블럭이 있는지 확인
- 일치하는 catch블럭을 찾게 되면 블럭 내 문장 수행, try-catch 문 빠져나가고 그 다음문장 수행 만약 일치하는 catch문을 찾지 못하면 예외처리 못함
- try 블럭 내에서 예외가 발생하지 않은 경우
- catch블럭을 거치지 않고 전체 try-catch문을 빠져나가서 수행을 계속한다
예외 발생시키기
연산자 new를 이용해서 발생시키려는 예외 클래스의 객체를 만든 다음
Exception e = new Exception("고의로 발생시켰음");
키워드 throw를 이용해서 예외를 발생시킴
throw e;
메서드에서 예외 선언하기
- 예외를 처리하는 또 다른 방법
- 사실은 예외 처리가 아니라 호출한 메서드로 전달해주는 것
- 호출한 메서드에서 예외처리를 해야만 할 때 사용
void method() throw Exception1, Exceptiom2,...{
//메서드 내용
}
finally 블럭
- 예외의 발생여부에 상관없이 실행되어야 하는 코드
- 선택적 사용 가능 try -> catch -> finally 순서
- 예외 발생 시 try -> catch -> finally 순서
- 예외 미발생 시 try -> finally 순서
- try 또는 catch 블럭에서 return문을 만나도 finally블럭은 수행
try{
//예외가 발생할 가능성이 있는 문장들을 넣는다
}catch(Exception1 e1){
//예외처리를 위한 문장을 적는다
}finally{
//예외의 발생여부에 관계없이 항상 수행되어야하는 문장들을 넣는다
//finally 블럭은 try-catch문의 맨 마지막에 위치해야한다
}
사용자 정의 예외 만들기
프로그래머가 새로운 예외클래스를 정의하여 사용할 수 있다
class MyException extends Exception{
MyException(String msg){ //문자열을 매개변수로 받는 생성자
super(msg) //조상인 Exception클래스의 생성자를 호출한다
}
}
예외 되던지기
- 한 메서드에서 발생할 수 있는 예외가 여럿인 경우
- 몇개는 try-catch문을 통해서 메서드 내에서 자체적으로 처리하고
- 나머지는 선언부에 지정하여 호출한 메서드에서 처리하도록 한다
- 단 하나의 예외에 대해서도 예외가 발생한 메서드와 호출한 메서드, 양쪽에서 처리하도록 할 수 있음
연결된 예외
A가 예외 B를 발생 시켰다면 A를 B의 원인 예외라고 함
Throwable initCause(Throwable cause) //지정한 예외를 원인 예외로 등록
Throwable getCause() //원인 예외를 반환
java.lang 패키지
Object 클래스
- 모든 클래스의 최고 조상, 오직 11개의 메서드만 가지고 있음
- public boolean equals(Object obj): 객체 자신과 객체 obj가 같은 객체인지 알려준다(같으면 true)
- public String toString(): 객체 자신의 정보를 문자열로 반환한다
equals(Object obj): 등가 비교(주소 비교)
toString(): 인스턴스 변수에 저장된 값들을 문자열로 표현
String 클래스
- 불변
- 문자열 비교는 equals사용하기
- 문자열 리터럴: 한번 생성하면 변경X, 하나의 인스턴스 공유
- 빈 문자열: 공집합, 길이가 0인 배열, int[] iArr = {}; // 길이가 0인 int 배열
- join()과 StringJoiner: 여러 문자열 사이에 구분자를 넣어서 결합
StringBuffer클래스와 StringBuilder클래스
Math클래스
래퍼클래스
: 기본형을 참조형으로 표현한 것
- char와 int를 빼고는 앞 글자를 대문자로 하면 됨
- Character, Integer
문자열 -> 숫자
- Integer.parseInt("100") or Integer.valueOf("100")
오토박싱 & 언박싱
- 기본형과 참조형이 계산이 됨
- 컴파일러가 자동으로 변환해줌
- 오토박싱: 기본형 -> 참조형
- 언박싱: 참조형 -> 기본형
주간회고
- 자바 진도가 끝났다 진도를 겨우 따라갔는데 드디어 자바가 끝났다
- 복습을 매일 하지 못했다 진도를 따라가지 못해서 약간 지쳐서 복습을 못했다
- 아직 개념이 잡히지 않은 챕터(11장, 12장)가 있다
- 특히 12장이 진짜 이해가 안된다 많이 해보면 언젠가 알게되겠지뭥...
다음주 목표
- 다음주 월요일에 보는 시험을 위해 자바 복습을 계속할 예정이다
- 하루 한시간 자바 목차보면서 종이에 쓰기
- 실습 많이 하기 특히 11장 12장!
- 그리고 제발 11시 전에 자기 진짜 피곤해서 공부가 안된다