[Java] 예외 처리 Exception

package day0221;

 

import java.util.Scanner;

 

// 구구단 출력 클래스

public class MultiTable {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

System.out.print("출력할 단을 입력하세요 (2~9): ");

int dan = scanner.nextInt();

scanner.close(); // Scanner 닫기

 

try {

printDan(dan);

} catch (NumException e) {

System.out.println("예외 발생: " + e.getMessage());

}

}

 

public static void printDan(int dan) throws NumException {

if (dan < 2 || dan > 9) {

throw new NumException("단은 2와 9 사이여야 합니다.");

}

 

for (int i = 1; i < 10; i++) {

System.out.println(dan + " x " + i + " = " + (dan * i));

}

}

}

콘솔 출력

출력할 단을 입력하세요 (2~9):

예외인 값을 입력했을 때

출력할 단을 입력하세요 (2~9): 1

예외 발생: 단은 2와 9 사이여야 합니다.

범위에 해당하는 값을 입력했을 때

출력할 단을 입력하세요 (2~9): 3

3 x 1 = 3

3 x 2 = 6

3 x 3 = 9

3 x 4 = 12

3 x 5 = 15

3 x 6 = 18

3 x 7 = 21

3 x 8 = 24

3 x 9 = 27

 

package day0221;

 

/**

* main method 에서 arguments 두개의 수를 입력 받아, 나누는 일

*/

public class TestRuntimeException {

 

public static void main(String[] args) {

 

try {

int num=Integer.parseInt(args[0]);

int num2=Integer.parseInt(args[1]);

// args[0]/args[1]; //유효하지 않은 연산

 

int result=num/num2;

System.out.println(num+ " / " + num2 + " = " + result);

}catch(ArrayIndexOutOfBoundsException aioobe) {

System.out.println("ㅈㅅ요");

System.out.println("실행법 ) java TestRuntimeException 값 값");

System.err.println("간단한 메시지 : "+ aioobe.getMessage());

System.err.println("예외처리객체와 간단한 메시지 " + aioobe);

aioobe.printStackTrace(); //예외처리와 관계있는 모든 클래스를 콘솔에 출력

}catch(NumberFormatException nfe) {

System.out.println("ㅋㅋ");

System.out.println("숫자 넣으라고 java.lang.NumberFormatException");

}catch(ArithmeticException ae) {

System.out.println("ㅉㅉ");

System.out.println("0으로 나눌 수 없음 java.lang.ArithmeticException");

}catch(Exception e) {

System.out.println("갱생가능");

// throwable => 갱생불가

}finally {

System.out.println("ㅅㄱ링");

}//finally

 

}//main

 

}//class

argument에 값을 넣지 않은

콘솔 출력 > 예외 처리

ㅈㅅ요

실행법 ) java TestRuntimeException 값 값

간단한 메시지 : Index 0 out of bounds for length 0

예외처리객체와 간단한 메시지 java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0

at day0221.TestRuntimeException.main(TestRuntimeException.java:11)

ㅅㄱ링

argument에 값을 입력

콘솔 출력

10 / 20 = 0

ㅅㄱ링

package day0221;

 

import java.util.Random;

 

public class TestUserDefineException {

 

/**

* 사용자 정의 예외 발생

* @return

* @throws TabaccoException

*/

public String taeil()throws TabaccoException {

String msg="";

String[] grade= {"대학생","유사성인","촉법소년","잼민이"};

 

int random=new Random().nextInt(grade.length);

String selectGrade=grade[random];

if(random == 3) {

// throw new TabaccoException(selectGrade+ "님 지나친 흡연은 건강에 해로워요");

throw new TabaccoException(); //기본 생성자

}//end if

 

msg=selectGrade+"이 흡연증 ('' )( '') 모른 척 지나간다. ";

 

return msg;

}//taeil

 

public void useTaeil() {

 

try {

System.out.println(taeil());

//사용자 정의 예외 처리클래스 사용하면 가독성 향상

} catch (TabaccoException e) {

e.printStackTrace();

}//end catch

 

}//useTaeil

 

public static void main(String[] args) {

TestUserDefineException tude= new TestUserDefineException();

tude.useTaeil();

}//main

 

}//class

대학생,유사성인,촉법소년,잼민이 중 랜덤한 값으로 실행됨

콘솔 출력 

촉법소년이 흡연증 ('' )( '') 모른 척 지나간다.