일단 해보는 코딩/Java

[Java] Try - Catch(예외처리)

eun_zoey2 2022. 8. 1. 12:24
728x90

# Try - Catch(예외처리)

 

자바에서 프로그램이 실행되는 도중에 예외(에러)가 발생하면 그 시점에서 프로그램이 강제로 종료된다.  원래는 프로그램을 디버깅(Debugging)해서 오류를 수정한 뒤 실행하는 것이 원칙이지만 때로는 예상할 수 있는 가벼운 오류(숫자를 0으로 나눔 : 불능, 0을 0으로 나눔 : 부정) 가 있거나, 예외가 발생했을 때도 프로그램이 종료되지 않고 그 이후의 프로세스를 진행시키는 것이 더 좋을 수도 있다. 일종의 FailSafe 기법이라고 한다.

예외 처리를 통해 프로그램의 비정상적인 종료를 줄이고 정상적으로 프로그램이 계속 진행될 수 있도록 할 수 있다. 

 

catch 구문 

catch (Exception e) {
      e.printStackTrace( ), e.~
			} ;

 

예제1)

 

1. 일단 코드를 작성한다.

 

 

package Java11;

public class Test02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 0;
		int result = 0;
		result = 10/n;	// 오류발생
		System.out.println(result);
	}

}

2. 오류부분을  try ~ catch 문장으로 감싸준다.

(미리 try ~ catch 문을 의식하지 말고 일반적으로 프로그램을 작성한 뒤 오류가 있을 곳으로 예상되는 부분만 try ~ catch 으로 감싸기)

package Java11;

public class Test02 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int n = 0;
		int result = 0;
		try {
		result = 10/n;	// 오류발생
		} catch (Exception e) { // 이 부분은 여러 개의 오류를 ,로 구분해서 뿌릴 수 있다.
			e.printStackTrace();
			System.out.println("Error occurred");
		}
		System.out.println(result);
	}
}
// 오류가 있어도 try ~ catch 문으로 처리한 뒤 나머지를 실행해서 결과 0을 보임

 

   추가 예제 

더보기

예제 1) 

package Java11;

public class Test03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] var = {10,20,30};
		for (int i=0; i<=var.length; i++) {
			System.out.println("var[" + i + "] = " + var[i]);
		}
		System.out.println("프로그램 끝");
	}
}
package Java11;

public class Test03 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] var = {10,20,30};
		try {
		for (int i=0; i<=var.length; i++) {
			System.out.println("var[" + i + "] = " + var[i]);
		}
	}
		catch (Exception e) {
			e.printStackTrace();
			System.out.println("배열 범위 초과 오류");
		}
		System.out.println("프로그램 끝");
	}
}

 

Q1. Scanner 객체를 통해서 정수를 입력받는다. 정수이면 그대로 출력하고 정수가 아니면 "정수만 입력할 수 있습니다" 라는 오류 메세지가 출력되게 하세요 . 

 

 

package Java11;

import java.util.Scanner;

public class Q1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("정수를 입력하세요");
		Scanner scan = new Scanner(System.in);
		try {
		int i = scan.nextInt();
		scan.close();
		
		System.out.println("입력하신 숫자는 : " + i);
	}
		catch (Exception e) {
			 e.printStackTrace();
			System.out.println("정수만 입력하라구요");
		}
	}
}

 

Q2. Scanner 객체를 통해서 정수를 입력받는데 정수가 입력되었는지 판단해서 100을 입력해서 정수면 '100은 정수입니다' 라고 출력해주고, 13.2를 입력하면 '13.2는 정수가 아닙니다' 를 출력하게 하시오 .

 

String str=""; // 문자열이 최상위 (실수를 집어넣어도 처리해줌)

 

package Java11;

import java.util.Scanner;

public class Q2 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("정수를 입력하세요");
		Scanner scan = new Scanner(System.in);
		
		String str="";
		try { 
		str= scan.next();
		System.out.println("결과 : " + Integer.parseInt(str));
		} 
		catch (Exception e) {
			 //e.printStackTrace();
			System.out.println(str + "은(는) 정수가 아닙니다.");
			scan.close();
		}
	}
}