*예외처리
p440~512p
모든 클래스는 Object에 담긴다.
그런데, 문제는
담기지말아야할 잘못된 것이 담길수가 있다.
개발자가 어떻게 못하는 에러부분
1. Exception과 Error의 차이점
1) Error : 프로그램 코드에 의해서 수습할 수 없는 심각한 오류
메모리 부족, thread 죽음, …. (개발자가 손댈 수 없는 영역)
2) Exception : 사용자의 잘못된 조작 또는 개발자의 잘못된 코딩으로 발생하는
프로그램 오류, 프로그램 코드에 의해서 수습될 수 있는 다소 미약한
오류 (개발자가 손댈 수 있는 영역)
2. 예외 클래스의 일반예외, 실행예외
- 일반 예외(Checked Exception) : 컴파일 전에 체크, 컴파일자체가 불가
Exception
ClassNotFoundException
InterruptedException
IOException(3입출력오류)
FileNotFoundException
- 실행예외(UnChecked Exption - RuntimeException) : 실행시 체크
컴파일에는 문제 없지만, 실행하다 예외가 발생하면 프로그램종료
Exception(밑의 인셉션들의 범위크기는 비슷하다 Exception이 가장큰 범위)
(Exception만 위로 안올리면 된다.)
ArithmeticException - 수학적으로 문제 있을 때
ClassCastException - 타입변환이 잘못 되었을 때
IndexOutOfBoundsException
NullPointerException
…
3. 예외처리 : 예외 처리하면 정상 실행가능
1)캐치문
try{
예외가 발생할 가능성 있는 구문
}catch(예외클래스명 참조변수명){
예외처리 블록
}
try{
예외가 발생할 가능성 있는 구문
}catch(예외클래스명 참조변수명){
예외처리 블록
}finally{
예외 발생여부와 상관없이 무조건 실행하는 블록
}
4. Throwable 클래스의 주요 메소드
getMessage() : Throwable 객체의 자세한 메세지를 반환
toString() : Throwable 객체의 간단한 메세지를 반환
printStackTrace() : Throwable 객체와 예외 추적 정보를 콘솔 뷰에 출력
5. 다중 예외 처리
- try ~ catch 블록을 여러 개 사용 가능
-발생한 예외 객체를 받을 수 있는 catch 블록 실행
-위에서 아래로 실행, 범위가 좁은 것부터 써야 함
try{
예외가 발생할 가능성 있는 구문
}catch(예외클래스명 참조변수명){
예외처리 블록
}catch(예외클래스명 참조변수명){
예외처리 블록
}finally{
예외 발생여부와 상관없이 무조건 실행하는 블록
}
try{
}catch(예외타입 A | 예외타입 B … 참조변수명) {
}
6.리소스 자동해제 예외 처리
리소스 자동해체가 필요한 이유 : 다른곳에서 사용하기가 어려워질수 있다.
1)다른곳에서 사용하는 것에 제한됨.
2)메모리누수
try(리소스를 사용하는 코드;){
}catch(예외클래스 이름 참조변수명){
}
7. 예외의 전가(throws)
내가처리하는 것 아닌, 나를 호출한 곳에서 처리하게 하는 것
예외처리를 자신이 호출된 지점으로 전가(떠넘기기)
이 경우 예외처리는 전가 받은 상위 위치에서 처리
메소드명(...) throws 예외 클래스
리턴타입 메소드명(입력매개변수, …) throws 예외클래스명{예외발생코드}
◐
Class 클래스
클래스와 인터페이스의 메타 데이터를 관리
클래스 이름, 생성자 정보, 필드 정보, 메소드 정보 - 메타 데이터
◐
Wrapper(포장)클래스
기본타입(byte, short, int, long, float, double, char, boolean)의 값을 갖는 개체를
생성할 수 없다.
기본 타입을 포장해서 객체를 생성할 수 있게 하는 것
이런 객체를 Wrapper Class라고 함.
기본 타입을 내부에 두고 포장만 하기 때문
포장하고 있는 기본 타입은 외부에서 변경할 수 없다.
내부의 값을 변경하려면 새로운 포장객체를 만들어야 함
박싱(Boxing) : 기본 타입의 값을 포장 객체로 만드는 과정
언박싱(Unboxing) : 포장 객체에서 기본타입의 값을 얻어내는 과정
자동 박싱과 자동 언박싱
기본타입 Wrapper Class
byte Byte
char Character
short Short
int Integer
long Long
float Float
double Double
boolean Boolean
Integer intObj = new Integer(10); //박싱
unBoxingInt = intObj.IntValue()l //언박싱
Double doObj = 23.5; //자동 박싱
double unBoxingDouble = doubleBoxing;
double value = doubleBoxing + 50; //자동 언박싱
//기본타입으로 객체 생성 못한다.
//주소값을 못갖는다. 거기다가 포장해논거다
//포장할수없는 상황이 생길떄, 쓴다.
‘제네릭’은 기본타입을 선언할 수가 없다.
기본타입 : stack : 직접 값을 담는 변수
참조타입 : 주소를 담는 변수 (값은 힙에 저장된다)
◐
Math 클래스
수학계산에 사용한다.
Math.abs(값) - 절대값
Math.max(값1, 값2) : 값1과 값2의 값을 비교해서 더 큰 값
Math.min(값1, 값2) : 두 값중에서 작은 값
Math.ceil(double value) : 올림
Math.floor(double value) : 버림
Math.round(double value) : 반올림
Math.random() : 난수 발생
'1. JAVA > 3). 자바_개념' 카테고리의 다른 글
자바_개념_Day_29 (1) | 2024.02.08 |
---|---|
자바_개념_Day_27 (1) | 2024.02.06 |
자바_개념_Day_25 (0) | 2024.02.02 |
자바_개념_Day_24 (0) | 2024.02.01 |
자바_개념_Day_23 (0) | 2024.01.31 |