에러종류 | 설명 | 예시 |
---|---|---|
컴파일 에러 | 컴파일 시 발생하는 에러 | 오타나 잘못된 구문 |
런타임 에러 | 실행 시 발생하는 에러 | null을 참조하거나 없는 index호출 |
논리적 에러 | 실행은 되지만 의도와 다르게 동작 | 재고가 음수, 게임상 버그 |
종류 | 설명 | 예시 |
---|---|---|
에러 | 수습될 수 없는 심각한 오류 | 메모리부족 |
예외 | 수습될 수 있는 미약한 오류 | NPE |
try {
System.out.println(1);
}catch(Exception e){
System.out.println(2);
}
System.out.println(3);
catch (NullPointerException | ArrayIndexOutOfBoundsException e)
NullPointerException e = new NullPointerException();
throw e;
throw new NullPointerException();
public void sample() throws NullPointerException, ArrayIndexOutOfBoundsException{
}
public void main() {
sample();
try {
sample2();
} catch (IOException e) {
e.printStackTrace();
}
}
public void sample() throws NullPointerException, ArrayIndexOutOfBoundsException{
// 예외처리할 필요가 없음 unchecked 예외
}
public void sample2() throws IOException{
// 예외처리 필요 ! checked 예외
}
예외의 발생여부와 관계없이 실행되어야 하는 코드를 넣는다.
선택적으로 사용할 수 있으며, try-catch-finally의 순서로 구성된다.
예외 발생시, try → catch → finally의 순서로 실행되고
예외 미발생시, try → finally의 순서로 실행된다.
try 블럭에서 return 문이 실행되는 경우에도 finally 블럭의 문장들이 먼저 실행된 후에 현재 실행중인 메서드를 종료한다.
이와 마찬가지로 catch블럭의 문장수행중에 return문을 만나도 finally의 문장들은 수행된다. (예제 8-19 참조)
try(FileInputStream inputStream = new FileInputStream("")){
}catch (Exception e) {
}
public void main() {
try {
sample();
} catch (Exception e) {
System.err.println("호출한 메서드에서 예외처리를 한번 더");
}
}
public void sample() throws Exception{
try {
}catch(Exception e){
System.err.println("에러 발생");
throw e;
}
}
public void main() {
try {
sample();
} catch (Exception e) {
e.getCause(); //원인 예외를 반환
}
}
public void sample() throws Exception{
try {
}catch(NullPointerException e){
Exception e1 = new Exception();
e1.initCause(e); //지정한 예외를 원인 예외로 등록
throw e1;
}
}