예외처리(Exception)
(1) 에러(Error)
컴파일 시 발생하는 에러
런타임 시 발생하는 에러
(2) 예외
런타임 시 발생하는 에러 중에
개발자가 처리 가능한 에러
cf) 처리가 불가능한 에러
OOM(Out Of Memory)
- 예외처리할 메모리 조차도 없음
(3) 예외처리 방법
try {
예외 검사를 하고 싶은 내용;
}
catch(예외명1){
1번 예외에 대해 할 일;
}
catch(예외명2){
2번 예외에 대해 할 일;
}
....
catch(Exception e){
예상 불가능한 예외 모두;
}
*) 어쩔 수 없이 예외처리를 해야하는 경우
-> 메서드가 throws Exception을 하는 경우
(4) 예외 출력 방법
e.getMessage() : 오류의 기본적인 내용을 문자열로
e.toString() : 오류의 조금 자세한 내용을 문자열로
e.printStackTrace() : 오류의 상세 정보 출력
☆ Code
★ ExceptionTest
public class ExceptionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calculator c = new Calculator();
c.setOperand(100, 27);
c.divide1();
c.setOperand(100, 0);
// c.divide1(); // 0 나누기에 대한 대비가 안되어있어 프로그램 예외 종료
c.divide2();
try {
c.divide3();
}
catch(Exception e) { e.printStackTrace(); }
c.setOperand(100000, 0);
try {
c.divide4();
}
catch(Exception e) { e.printStackTrace(); }
System.out.println("프로그램 완벽 종료");
}
void test() throws Exception {
Calculator c = new Calculator();
c.divide3();
}
}
class Calculator {
int left, right;
public void setOperand(int left, int right) {
this.left = left;
this.right = right;
}
// 무대비
public void divide1() {
System.out.println("[divide()] " + left/right);
}
// 완벽한 예외 대비
public void divide2() {
try {
System.out.println("[divide()] " + left/right);
}
catch(ArithmeticException e) {
System.out.println("[divide()] 아리스메틱 오류 발생!");
System.out.println("[divide()][B001] 오류 데이터 : " + left + ", " + right);
System.out.println("[divide()] 집에 가");
System.out.println(e.getMessage());
System.out.println(e.toString());
e.printStackTrace();
}
}
// 예고 또는 경고
public void divide3() throws Exception {
System.out.println("[divide()] " + left/right);
}
// 사용자(개발자, 나)가 예외를 강제로 발생시키는 메서드
public void divide4() throws Exception {
if(left >= 10000) // left가 10000 이상인 경우 나누기를 하고 싶지 않다면?
throw new Exception("10000 이상 입력하셨습니다.");
System.out.println("[divide()] " + left/right);
}
}
★ MyExceptionTest
public class MyExceptionTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
// sendReceipt(400000000);
// sendReceipt(300);
sendReceipt(200000);
}
catch(Exception e) {
e.printStackTrace();
try {
}
catch(Exception e2) { e2.printStackTrace(); }
}
finally {
System.out.println("[finally] 오류나던지 말던지 나는 수행해라");
}
System.out.println("[회계 프로그램] 정상 종료");
}
public static void sendReceipt(int amt) throws MyException {
if(amt > 100000000)
throw new MyException("[B001] 과도한 청구금액");
else if(amt < 1000)
throw new MyException("[B002] 금액 " + amt + "원은 니 돈주고 사먹어");
System.out.println("[sendReceipt()] " + amt + "원 정상처리");
}
}
class MyException extends Exception {
MyException(String msg){
super(msg);
System.out.println("[MyException] 경찰서 고발");
System.out.println("[MyException] 메시지 로그 기록");
System.out.println("[MyException] 모든 전원 오프");
System.out.println("[MyException] 전원 계약 해지");
System.out.println("[MyException] 관련자 모두 무급 출근");
System.out.println("[MyException] 사장님에게 보고");
}
}
'JAVA' 카테고리의 다른 글
JAVA 제네릭 (0) | 2024.11.17 |
---|---|
JAVA 컬렉션 프레임워크 (1) | 2024.11.16 |
JAVA base class (3) | 2024.11.15 |
JAVA 인터페이스 (2) | 2024.11.15 |
JAVA string class (0) | 2024.11.15 |