에러(오류) : 프로그램이 오작동 또는 비정상적으로 종료 되는 심각한 문제
컴파일 에러: 컴파일시 발생하는 에러
런타임 에러: 프로그램 실행시 발생하는 에러
논리적 에러: 컴파일도, 실행도 되지만 의도와 다른 결과를 발생시키는 에러
예외 : 발생하더라도 경미해서 수습이 가능한 문제
1. Exception : 최고 조상 예외. 외적인 요소로 발생. 자손=>checked예외
2. RuntimeException : 프로그래머의 실수로 발생. 자손=>unchecked예외
[형식1] try-catch문
catch블럭은 여러개가 올 수 있음.
단 조상 예외는 자손의 예외보다 먼저 올 수 없다.try{ /*예외가 발생할 수도 있는 문장;*/ }catch(/*예외타입 변수*/){ /*예외 발생시 수행할 문장*/ }finally{ /*예외와 상관 없이 무조건 수행시킬 문장*/ }
[형식2] 메소드에 예외선언 throws
여러개의 예외를 throws로 한번에 처리할 수 있음.
클래스의 재사용성을 높임main 메소드 . . public static void 메소드(변수) throws /*예외1,예외2,예외3....*/{ /*구현부 작성*/ }
printStackTrace(): 호출스택에 있었던 메서드 정보와 예외 메시지를 출력
getMessage(): 해당 예외클래스에서 저장된 메시지 리턴
->논리적인 오류가 발생했을 때 조건을 걸어서 강제로 예외를 발생시킬 수 있음
->메소드 예외선언 throws와 혼동하지 않도록 주의
- new를 사용해 예외클래스의 객체를 만듦
- throw를 사용해 예외를 발생시킨다.
Exception e = new Exception("error!"); throw e;
프로그래머가 예외를 직접 정의하여 사용할 수 있다.
1.조상 예외를 상속받는 클래스를 만듦
2.생성자를 만들어 조상 클래스의 생성자 호출(super())
3.getMessage()로 리턴을 해주기 위해 오버라이딩 해주어야 함.
- 객체로 불러와서 예외 발생 시킴
class MakeException extends Exception{ public MakeException(String errMsg){ super(errMsg); } @Override public String getMessage(){ return "에러: "+super.getMessage(); } }