FIF's 코딩팩토리

자바 기초 NCS교육과정(39)-예외처리 본문

Back-End/국비 NCS교과과정

자바 기초 NCS교육과정(39)-예외처리

FIF 2019. 8. 1. 15:03
반응형
Exception

오류
 1 문법적 오류 : 오타, 자바문법에 맞지 않은 로직등을 구현할때 발생한다.
 2 실행오류 :  실행할때 발생되는 오류이다.
 
 실행오류(자바 런타임 에러)
 1 에러(error) : 프로그램 코드에 의해서 해결할 수 없는 심각한 오류
 2 예외(exception) : 프로그램 코드에 의해서 해결할 수 있는 오류

 int arr[]={10,20};
 arr[3];(쓰레기값)
 exception을 제공해준 목적 :
 기본 시스템은 정확하지 않는 값을 처리하는데 자바에서는  정확한 값만 처리할수
 있도록 exception을 제공해준다.
 exception이 발생이 되면 프로그램이 정상적인 종료가 안되므로 이를 해결하기
 위해서 예외처리를 제공해주고 있다. 

 예외가 발생되는 시점에 따라
 1 checked exception
 컴파일시점에 발생이 되므로 반드시 예외처리를 해야한다.
 RuntimeException외 클래스들이다.
 2 unchecked exception
 실행시점에 발생이되므로 예외처리를 선택이다.
 RuntimeException과 하위클래스들이다.

 예외처리
 1  try{
 //exception 발생 가능이 있는 구문
 }catch(//try영역에서 발생된 exception객체 선언){
 //try영역에서 exception이 발생되었을때 해결해주는 구문
 }finally{
 //무조건 실행되는 구문
 }

 2 exception이 발생되었을때 처리순서
 try영역-> catch영역-> finally영억
 exception이 발생되지 안았을때 처리순서
 try영역->finally영역


 3 try영역 또는 catch영역 에서 return을 만나고 finally영역을 수행을 한다.
 4 try~catch, try~finally만 작성해도 가능하다.
 단 catch~finally, try은 사용할 수 없다.

 5 예외의 메세지
 String getMessage() :메세지
 String toString() : 예외타입과 메세지
 void printStackTrace() : 예외가 발생된 경로 추적
 
다중catch
 1 is a(상속)관계에 있는 exception들을 나열할때는 제일위에 최하위 자손
   제일 아래에 최상의 조상을 입력한다.
 2 is a관계가 아닌  exception객체들은 순서에 상관없다.
 
 catch(ArrayIndexOutOfBoundException ex){}
 catch(RuntimeException ex){}
 catch(Exception ex){}(제일 상)
 
 throws
 예외처리를 현재 메소드를 호출하는 곳으로 떠 넘길때 사용한다.
 java.io, java.net
 
 throw
 강제적으로 exception을 발생시킬때 사용한다.

 

 

 

 

Java152_exception.java

public class Java152_exception {

	public static void main(String[] args) {
		int[] num = new int[] {10,20,30};
		try {
			//예외가 발생될 가능성이 있는 구문
		System.out.println(num[5]);
		}catch(ArrayIndexOutOfBoundsException ex){
			//에외 발생 문제를 해결함
			System.out.println(ex.toString());
		}finally {
			//무조건 실행
			System.out.println("에외 처리 종료");
		}
		
		System.out.println("program end");
	}

}

출력결과

 

Java153_exception.java

public class Java153_exception {

	public static void main(String[] args) {
		StringBuffer sb=null;
		try {
		sb.reverse();
		}catch(NullPointerException ex){
			System.out.println(ex.toString());
		}
		System.out.println("prgram end");

	}

}

출력결과

 

Java154_exception.java

public class Java154_exception {

	public static void main(String[] args) {
		String data1 = "10";
		String data2 = "0";
		
		try {
		int x = Integer.parseInt(data1);
		int y = Integer.parseInt(data2);
		int res = x / y;
		System.out.println(res);
		}catch(NumberFormatException ex){
			System.out.println("숫자를 입력하세요.");
		}catch(ArithmeticException ex) {
			System.out.println("분모는 0을 사용할 수 없습니다.");
		}catch(RuntimeException ex) {
			System.out.println(ex.toString());
		}catch(Exception ex) {
			System.out.println(ex.toString());
		}
		System.out.println("program end");
	}

}

출력결과

 

Java155_exception.java

public class Java155_exception {

	public static void main(String[] args) {
		File  file=new File("samlple.txt");
		FileReader fr=null;
		try {
		fr=new FileReader(file);
		}catch(FileNotFoundException ex	) {
			System.out.println(ex.toString());
		}finally {
			try {
			fr.close();
			}catch(IOException ex	) {
				System.out.println(ex.toString());
			}catch(NullPointerException ex) {
				System.out.println(ex.toString());
			}
		}
	}

}

출력결과

 

Java156_exception.java

public class Java156_exception {

	public static void main(String[] args) {
		String data1="9";
		String data2="0";
		
		try {
		int x= Integer.parseInt(data1);
		int y= Integer.parseInt(data2);
		process(x,y);
		}catch(NumberFormatException ex) {
			System.out.println(ex.toString());
		}catch(ArithmeticException ex) {
			System.out.println(ex.toString());
		}
		System.out.println("program end");

	}
	
	public static void process(int x, int y) throws ArithmeticException{
		int res=x/y;
		System.out.println(res);
	}

}

출력결과

 

Java157_exception.java

public class Java157_exception {

	public static void main(String[] args) {
		int num =5;
		process(num);
		System.out.println("korea");

	}
	public static void process(int data) {
		try {
		if(data<10) {
			throw new ArithmeticException("10이상만 입력하세요");
		}
		}catch(ArithmeticException ex) {
			System.out.println(ex.toString());
		}
	}

}

출력결과

 

Java158_exception.java

public class Java158_exception {

	public static void main(String[] args) {
		String data="9910as";
		process(data);
	}
	public static void process(String data) {
		char chk;
		for(int i=0; i<data.length();i++) {
			chk=data.charAt(i);
			if(!Character.isDigit(chk))
				try {
					throw new UserException("숫자만 입력하세요");
				} catch (UserException e) {
					e.printStackTrace();
					System.out.println(e.toString());
					return;
				}
		}
		System.out.println(data);
	}

}

출력결과

반응형
Comments