본문 바로가기
JAVA

[JAVA] 예외 처리

by KhyeonS 2022. 8. 1.

예외처리에 대해 알아보자.


Try Catch(예외처리)

자바에서 프로그램이 실행되는 도중에 예외(에러)가 발생하면 그 시점에서 프로그램이 강제로 종료된다.

원래는 프로그램을 디버깅(Debugging) 해서 오류를 수정한 뒤 실행하는것이 원칙이지만, 때로는 예상할 수 있는 가벼운 오류(숫자를 0으로 나눔:불능, 0 을 0으로 나눔:부정)가 있거나, 예외가 발생했을때도 프로그램이 종료되지 않고 그 이후의 프로세스를 진행시키는 것이 더 좋을 때도 있다. 일종의 FailSafe 기법으로 볼 수 있다. 예외처리를 통해 프로그램의 비정상적인 종료를 줄이고 정상적으로 프로그램이 계속 진행될 수 있도록 할 수 있다.

 

==> 미리 try ~ catch ~문을 의식하지 말고 일반적인 프로그램을 작성한뒤, 오류가 있을곳으로 예상되는 곳에 try ~ catch~ 문은 거의 공식적으로 정해져 있다.

catch (Exception e){

    e.printStackTrace, e.~}

   문으로 작성해준다.

 

예외처리는 프로그램 실행에서 발생할 수 있는 에러에 대해서 미리 대응을 해주는 것이다. 에러가 발생하면 전용 예외 클래스 Exception 오브젝트가 생성된다. 
     try(에러가 날 곳 예상), 
     catch(에러 발생 시 에러 메시지 등), 
     finally(실제 처리)를 사용해서 기술한다. throws를 통해서 메써드에서 일어날 수 있는 예외 클래스를 지정하는데 메써드를 호출한 곳에 이 예외를 받아 줄 catch가 없으면 컴파일 에러가 뜬다.

 

ERROR

package java11;

public class Test03 {

	public static void main(String[] args) {
		
		int n = 0;
		int result = 0;
		result = 10/n; // Here you can see error
		
		System.out.println(result);
	}

}

package java11;

public class Test03 {

	public static void main(String[] args) {
		
		int n = 0;
		int result = 0;
		try {
			result = 10/n; // Here you can see error
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			System.out.println("Error occurred");
		}
		System.out.println(result);
	}

}

 

package java11;

public class Test04 {

	public static void main(String[] args) {
		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 Test04 {

	public static void main(String[] args) {
		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("프로그램 끝");
	}

}

package java11;

import java.util.Scanner;

public class Test05 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in); 
		System.out.print("정수 :");
		
		int number = 0;
		
		try {
			number = sc.nextInt();
			System.out.println("결과:"+number);
			
		} catch (Exception e) {
			System.out.println("정수만 입력할 수 있습니다.");
		}
		
	}

}

package java11;

import java.util.Scanner;

public class Test06 {

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

}


finally

  finally(실제 처리)를 사용해서 기술한다. throws를 통해서 메써드에서 일어날 수 있는 예외 클래스를 지정하는데 메써드를 호출한 곳에 이 예외를 받아 줄 catch가 없으면 컴파일 에러가 뜬다.

package java0808;

import java.util.prefs.BackingStoreException;

public class Test03 {
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
				back(args[0]);   // 하나의 인자를 필요로 하는 back() 메써드 호출
		} catch (Exception e) {
			System.out.println("메써드의 인수가 없어요");
			e.printStackTrace();    // 에러의 내용을 보임
		} finally {
			System.out.println("종료합니다....");
		}
	}
		static void back(String a) throws Exception{  // 인자를 주어서 메써드 back() 정의,
			// 여기서 오류가 있을때 여기서 처리하지 말고 호출한 곳으로 가서 처리를 받아라.
			System.out.println(a);
		}
	
	}

'JAVA' 카테고리의 다른 글

[JAVA] getter와 setter  (0) 2022.08.02
[JAVA] Thread  (0) 2022.08.01
[JAVA]인터페이스, 열거형, 내부클래스  (0) 2022.07.29
[JAVA]Object, 제네릭 클래스, 추상 메써드  (0) 2022.07.28
[JAVA] 상속  (0) 2022.07.27

댓글