어떤 원인때문에 비정상적인 동작을 일으키며 프로그램이 종료되는 상황을 말한다.
자바에서는 런타임 오류를 에러(Error)와 예외(Exception)로 구분하고 있다.
try 문 안의 수행할 문장 중에서 예외가 발생하면
프로그램이 중지되거나 해당 예외를 catch에서 처리
catch문 안에서 다시 Exception 발생 시 다시 처리를 해줘야 함
즉, 2중 try ~ catch을 만들어야한다.
try {
<수행할 문장 1>;
<수행할 문장 2>;
...
} catch(예외1) {
<수행할 문장 A>;
...
} catch(예외2) {
<수행할 문장 a>;
...
}
--------------------
int c;
int[] a = new int[1];
try {
c = 4 / 0;
} catch (ArithmeticException e) {
a[4] = 4;
}
어떤 예외가 발생하더라도 반드시 실행되어야 하는 부분
try {
c = 4 / 0;
} catch (ArithmeticException e) {
c = -1;
} finally {
sample.shouldBeRun(); // 예외에 상관없이 무조건 수행된다.
}
class FoolException extends RuntimeException {
}
public class Sample {
public void sayNick(String nick) {
if("바보".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 "+nick+" 입니다.");
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.sayNick("바보");
sample.sayNick("야호");
}
}
class FoolException extends Exception {
}
public class Sample {
public void sayNick(String nick) {
try {
if("바보".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 "+nick+" 입니다.");
}catch(FoolException e) {
System.err.println("FoolException이 발생했습니다.");
}
}
public static void main(String[] args) {
Sample sample = new Sample();
sample.sayNick("바보");
sample.sayNick("야호");
}
}
// throws 사용 시 try 삭제 가능
public class Sample {
public void sayNick(String nick) throws FoolException {
if("바보".equals(nick)) {
throw new FoolException();
}
System.out.println("당신의 별명은 "+nick+" 입니다.");
}
}
https://wikidocs.net/229
https://interviewnoodle.com/exception-in-java-89a0b41e0c45