

또는(|)을 사용하여 한번에 처리도 가능. 그러나 에러처리가 동일하게 적용됨.

Exception은 모든 예외의 조상이기 떄문에 한번에 묶어서 예외처리를 할 수도 있긴 하다.

return을 통해 아래 코드들을 실행하지 않고 함수를 종료시킬 수 있지만, sc.close()가 안되는 문제가 발생함.
finally를 사용함.

정상적으로 종료돼도 finally는 실행이 되고, 예외처리가 발생해도 finally는 실행됨.
코드가 왜 이렇게 지저분해!! -> 스프링에서는 처리하는 프로그램이 있다.

finally 말고 sc를 종료하는 방법이 있지만 자주 안쓰임. try() 안에 입력.
참고

값은 infinity로 출력됨.

자바 내장 오류는 쉽게 처리가 가능한데, 금결원 전산 오류예외/ 잔액부족 예외 등은 직접 만들어줘야 하는 부분이다!!!!

위는 실행예외. 코드가 잘못됐을 가능성이 높음!

어레이 크기를 벗어났다는 에러
Thread.sleep(2000);//실행 간격을 두어서 서버 부하를 줄인다.
교재 보고 이론 조금 정리해보기
계산기를 만들어서 에러내기.

위와 같은 경우 CalUi(화면)에서 오류가 났다고 하지만 실제로 Cal(기능)에서 오류가 난 것.

따라서 위처럼 오류처리를 하면 Cal에서만 오류메세지가 처리되고 CalUi에서 오류 처리가 안된다. 따라서 CalUi로 에러를 던지는 처리가 필요함. CalUi에서 유저에게 오류메세지를 보여줘야함

throws로 오류가 발생할 수 있음을 처리해줌.
에러메세지를 고객 화면에 보여주기 위해서는 에러 발생한 프로그램에서 에러를 App까지 던져주고 처리해야 함.
package cal;
public class Cal {
public static double div(int a, int b) throws Exception{
double result = 0.0;
try {
result = a / b;
}catch(ArithmeticException e) {
throw e;
}
return result;
}
public static double div(double a, double b) {
double result = 0.0;
result = a / b;
return result;
}
}
package cal;
import java.util.Scanner;
public class CalUi {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
System.out.println("input 2 number");
int a = Integer.parseInt(sc.next());
int b = Integer.parseInt(sc.next());
double result;
try {
result = Cal.div(a, b);
System.out.println(result);
} catch (Exception e) {
System.out.println("0으로 못나눔");
//e.printStackTrace();
}
// System.out.println(result);
sc.close();
}
}
우리가 에러를 만들어서 던질거야.
package cal;
public class InfinityException extends Exception{
//java는 exception의 상속을 받아야 에러처리가 가능하다.
public InfinityException() {
}
public InfinityException(String msgcode) {//에러코드를 보낼거다
super(msgcode);
}
}
package cal;
public class Cal {
public static double div(int a, int b) throws Exception{
double result = 0.0;
try {
result = a / b;
}catch(ArithmeticException e) {
throw e;
}
return result;
}
public static double div(double a, double b) throws InfinityException {
double result = 0.0;
if(b == 0.0) {//어떤 예외를 던져줘야해? 우리가 만들어야 해.
throw new InfinityException("B0001");//우리가 에러를 만들어서 던졌다. 함수에도 던진다는 표시를 해야해.
//throw와 throws는 항상 함께 쓴다.
//에러를 던지면 아래 코드는 실행 안됨.
}
result = a / b;
return result;
}
}
package cal;
import java.util.Scanner;
public class CalUi2 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input 2 number");
double a = Double.parseDouble(sc.next());
double b = Double.parseDouble(sc.next());
double result = 0.0;
try {
result = Cal.div(a, b);
} catch (InfinityException e) {
System.out.println(e.getMessage());
}
System.out.println(result);
sc.close();
}
}
package cal;
import java.util.Scanner;
public class CalUi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("input 2 number");
int a = Integer.parseInt(sc.next());
int b = Integer.parseInt(sc.next());
double result;
//try catch 없이 throws Exception을 선언하는 것만으로 예외처리가 가능한지 확인하였지만 불가능.
// result = Cal.div(a, b);
// System.out.println(result);
try {
result = Cal.div(a, b);
System.out.println(result);
} catch (Exception e) {
System.out.println("0으로 못나눔");
//e.printStackTrace();
}
// System.out.println(result);
sc.close();
}
}
ㅇㅇ