try catch 자바의 프로그램 오류
프로그램 오류
-
컴파일 에러 : 컴파일 할때 발생하는 에러 (실행할수가없음 , 코드가 구려서 )
-
런타임 에러 : 실행 할 때 발생하는 에러 (프로그램종료매 ,개변수가없다거나) - 논리적 에러 : 작성 의도와 다르게 동작 (실행중임 , 근데 -음수가 들거가있다거나 함 )
컴파일이 하는일
구문체크,번역,최적화 (어느정도는 알아서계산해줌 ,생략된코드 추가해주거나)
javac : 컴파일러
런타임 에러
- 에러(error) : 프로그램 코드에 의해서 수습 될 수 없는 심각한 오류 ( OME : Out Of Memory Error)
- 예외(exception) : 프로그램 코드에 의해서 수습 될 수 있는 다소 미약한 오류
예외 Exception 과 RuntimeException
Exception 클래스들 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
-
IO Exception 입출력예외 인풋,아웃풋 -
ClassNotFoundException 클래스가 존재하지않음
Runtime Exception 클래스들 프로그래머의 실수로 발생하는예외
-
Arithmetic Exception 산술계산 예외 5/0 -
ClassCast Exception 형변환 -
NullPointer Exception null 일경우 -
IndexOutOfBounds Exception 배열 범위 벗어남
try - catch 예외처리
try { 트라이안에서 예외가 발생되면 바로 caht블럭으로 찾으러간다 } catch ( // e) { 걸맞는 catch가 있으면 try를 빠져나온다 }
class Ex8_4 {
public static void main(String args[]) {
System.out.println(1);
System.out.println(2);
try {
System.out.println(3);
System.out.println(0/0);
System.out.println(4); // 이전에께 이미 오류이니 다음꺼를 실행할필요가없으니 실행되지 않는다.
} catch (ArithmeticException ae) { //타입일치하는 에러명
if (ae instanceof ArithmeticException)
System.out.println("true");
System.out.println("ArithmeticException");
} catch (Exception e){ // 예외의 최고조상은 마지막에
System.out.println("Exception");
} // catch 문구를 빠져나온다
// 캐치내에 없을시 비정상 실행종료가된다
System.out.println(6);
} // main메서드의 끝부분
}
예외 발생시 예외에대한 객체가 생성된다
-
ArithmeticException객체 이안에 ( printStackTrace() , getMessage()가 존재한다 ).
java.lang.ArithmeticException: / by zero // < printStatcTrace(). at Ex8_5.main(Ex8_5.java:8). 예외 메시지 : / by zero // < getMessage()
printStatcTrace() : 예외발생 당시의 호출스택 에 있었던 메서드의 정보와 예외 메세지를 화면에 출력
- ArithmeticException.
getMessage() : 발생한 예외클래스의 인스턴스에 저장된 메세지를 얻을수있다 .
- 예외 메시지 : / by zero.
Throw 로 예외를 내가 발생시킬수있음
--------
Throwable (예외 처리 최상위층)
|
+-------------+------------------------------------------------------------+
| |
Exception Error
(checked) |
| |
+----------------------------------------------+ +-------------------------------+
| | | |
| RuntimeException (unchecked) +--- ...
| |
+--- IOException (checked) +--- ArithmeticException
| | +--- NullPointerException
| +--- FileNotFoundException +--- ArrayIndexOutOfBoundsException
| +--- EOFException +--- ClassCastException
| +--- SocketException +--- IllegalArgumentException
| +--- ... +--- NullPointerException
| +--- ...
|
|
|
|
|
+--- SQLException (checked)
| |
| +--- BatchUpdateException
| +--- SQLDataException
| +--- SQLSyntaxErrorException
| +--- ...
|
+--- ...
Exception 의자손 > checked 컴파일에러발생 try catch 해야함 필수 Runtime Exception 의 자손 > unchecked 컴파일에러는발생안함 try catch 선택
직접처리 > 예외 떠넘기기 > 은폐덮기
직접처리
-
try 예외가 발생할 가능성이 있는 문장을넣는다
-
catch 예외처리를 위한 문장을 적는다
-
finally 예외의발생여부관계없이 수행되어야하는문장 try - catch 문의 맨마지막
try 블럭안에 리턴이 있어 try를 벗어나도 finally가 실행된다
예외떠넘기기
-
throw 는 예외를 발생시킨 다 한마디로 catch 한테 가게 한다
-
throws <는 예외를 떠넘긴다 호출한곳으로 ,메서드 선언부에적는다 ( 폭탄넘기기)
예외무시 (은폐하기) 에러가발생해도그냥 다음코드실행 (빅데이터학습시 한두개학습안되도 걍 넘겨야할경우)
- 트라이 캐치문에 아무것도 적지않는다
디버깅 에러코드는 스택쌓은 모양이다
사용자 정의 예외 만들기
- 직접 예외 클래스를 정의할수있다
- 조상은 Exception , RuntimeException 에서 선택
- 조상인 super(msg) Exception 클래스의 생성자를 호출
- Exception (try -catch 필수 )
- RuntimeException (프로그래머의 실수로 발생시키는 예외 )
예외 되던지기 (exception re - throwing)
- 예외를 처리한 후에 다시 예외를 발생시키는것
- 호출한 메서드와 호출된 메서드 양쪽 모두에서 예외처리하는것
-
try - catch 후에 throw e > thorws > try - catch
- 예외란 호출한쪽 , 호출된쪽 , 양쪽에서도 할수도있다
연결된 예외 (chained exception)
- 한 예외가 다른 예외를 발생시킬수 있다
- 예외 A가 예외 B를 발생시키면 , A는 B의 원인 예외 (cause exeception)
Thowable initCause(Throwalbe cause) 지정한 예외를 원인예외로등록 Throwable getCause() 원인 예외 를반환
catch 문구의 예외가 A 새롭게 객체생성한 예외가 B
- 여러 예외를 하나로 묶어서 다루기 위해서 (많은 catch 블럭을 사용하지않을려고)
- 메소드를 만들어 여러가지 catch의 블럭들을 만들어놓고 쓴다
- RuntimeException(unchecked) 으로 감싸서 ( try catch 를 사용하지않을려고 )
Leave a comment