JAVA/코드

2022_10_17 연습 02 day10.exception.trycatch

0304호 2022. 10. 17.

TryCatchEx1~3

MultiCatchEx1

RuntimeEx

 

  예외처리 

 예외에는 컴파일러 체크 예외와 실행 예외가 있다.
 컴파일러 체크 예외는 빨간줄이 쳐지는 문법적 오류가 있는 에러;
 실행예외는 문법적으로는 맞지만 실행했을때 발생하는 에러;
   자바는 예외처리 메커니즘을 제공한다
    프로그램에서 문제가 될만한 부분을 예상하여 사전에
    "문제가 생기면 이렇게 처리하라" 라고 프로그래밍하는것을 예외처리라고 한다.

 NullPointerException - NPE
  값이 없는 상태, 즉 null값을 갖는 참조 변수로 객체 접근 연산자인 .을 사용했을 때 발생함
 ArrayIndexOutOfBoundsException
  배열에서 인덱스 범위를 초과하여 사용할 경우 발생
 NumberFormatException
  문자열로 되어 있는 데이터를 숫자로 변경하는 경우에 발생
 ClassCastException
  형변환은 부모클래스와 자식클래스간에 발생/구현클래스와 인터페이스간에 발생/ 
  이러한 관계가 아니면 다른클래스로 타입변환이 불가능함
 ---------------------------------------
 StackOverflow 사이트에 들어가면 모든 정보가 있다.
 사이트를 적극활용하여 에러를 찾아보자
 ----------------------------------------
 
 Try~catch~finally
  try블록에는 예외가 발생 할 수도 있는 코드를 작성(뭐든지 가능)
  catch블록은 에러가 발생하면 실행할 코드를 작성
  finally블록은 예외유무에 관계없이 항상 실행할 내용
  
  Try~Catch문은 elseIf문처럼 계속 이어서 작성가능

package day10.exception.trycatch;

public class MultiCatchEx01 {
	
	public static void main(String[] args) {
		
		//main에 args 사용방법
//		run -> run configration -> arguments탭 -> ${string_prompt} 
//		System.out.println(args[0]);
		
		try {
			String data1 = args[0];
			String data2 = args[1];
			
			int n1 = Integer.parseInt(data1);
			int n2 = Integer.parseInt(data2);
			String s = null;
			s.charAt(0);
			
//			System.out.println("두 수의 합 : ", (n1+n2));
			
		} catch (ArrayIndexOutOfBoundsException e) {
			System.out.println("매개값은 2개 입력하세요");
		}catch(NumberFormatException e ) {
			System.out.println("매개값은 숫자로 입력하세요");
		}catch(Exception e) {		//Exception을 쓴다는건 어떤 실행 예외든 처리가 가능하다는뜻(예외의 부모)
			//ctrl + t를 누르면 상하관계까 보임
			System.out.println("기타 예외 입니다.");
		}
		
		
	}

}
package day10.exception.trycatch;

public class RunTimeEx {

	public static void main(String[] args) {
		
		
		
		//실행예외(runtime)
//		String s = null;
//		if(s!= null) {
//			s.charAt(0);
//		}
		
		//ArrayIndexOutOfBoundsException
//		int[] arr = {1,2,3};
//		arr[5] = 10;
		
		//Class Cast
//		Object o = new Object();
//		Person p = (Person)o;
			
		//NumberFormat
//		String s= "홍길동";
//		Integer.parseInt(s);
				
		
		
		
		
	}	

}
package day10.exception.trycatch;

public class TryCatchEx01 {
	
	public static void main(String[] args) {
		
		int a= 10;
		int b= 0;
		System.out.println(a+b);
		
		try {
			System.out.println(a/b);
			System.out.println("실행이 될까요?");
			System.out.println(a%b);
			
		//catch뒤에는 해당 예외를 처리할 수 있는 예외종류가 들어감
		} catch (Exception e) {
			System.out.println("0으로 나눌수 없습니다.");
		}
		
	}

}
package day10.exception.trycatch;

public class TryCatchEx02 {
	public static void main(String[] args) {


		String[] arr = {"홍길동", "이순신", "홍길자"};

		int i = 0;


		while(i<4) {
			try {
				System.out.println(arr[i]);

			} catch (Exception e) {
				System.out.println("범위를 벗어났습니다");
			}finally {
				System.out.println("이 문장은 예외 여부와 상관없이 항상 실행됨");
			}
			i++;
		}

	}
}
package day10.exception.trycatch;

import java.util.*;
public class TryCatchEx03 {
	
	public static void main(String[] args) {
		//입력과 예외처리
		//0을 입력하기 전까지 숫자를 입력.
		
		Scanner scan = new Scanner(System.in);
		boolean flag = true;
		int num = 0;

		while(flag){
			
			try {
				System.out.print(">");
//				int num = Integer.parseInt( scan.nextLine() );
				num = scan.nextInt();		//nextInt는 정수만 받음
				if(num==0) break;	//0을 입력하면 탈출
				
			} catch (Exception e) {
				System.out.println("숫자를 입력하시오");
				scan = new Scanner(System.in);
//				scan.nextLine()
				
			}
			if(num==0) break;	//0을 입력하면 탈출
			
		}
	}

}

댓글