ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8일차 - 예외, 에러
    프로그래밍 언어/자바(JAVA) 2024. 2. 1. 09:08

    자바 예외, 에러 상속구조

    에러(Error)

    문법이나 메모리 사용 문제로 실행에 문제가 생겨 발생하는 오류
    : 나는 매개변수 값을 숫자로 설정했는데 문자를 넣은 경우

    예외(Exception)

    사용자의 오 조작이나 외부 문제로 발생하는 오류
    : 취미를 5개를 체크하세요 했는데 사용자가 8개를 넣은 경우

    • Exception
      : 컴파일 중에 발생되는 예외, 이클립스에서 빨간줄로 표시해주기도 한다
    • ★ Runtime Exception
      : 실행 중에 발생되는 예외를 말한다
      • ★ NullPointException 객체가 없는 상태에서 객체에 접근할 경우
      • 더보기
        // NullpointException : 객체의 주소가 null 값인 상태에서 메소드를 호출하거나 변수에 접근할 경우
        // - 가장 많이 실수하는 런타임 예외이다
        		String data = null;
        		System.out.println(data.toString());
        		// 현재 문법상으로 잘못된거는 없음, 빨간줄이 없는데 실행은 되고 예외가 발생된다
      • ★ ArrayIndexOutofBoundException 배열 인덱스 범위를 초과하여 사용 할 경우
      • 더보기
        // ArrayIndexOutofException : 선언된 배열의 크기보다 벗어난 인덱스에 접근하려할 경우
        //- ★★★★★ 배열의 개념이 안잡혀있으면 반복문안에 배열이 있을때에 제일 많이 실수하는 부분이다
        		String[] arr = new String[2];
        		arr[0] = "data1";
        		arr[1] = "data2";
        		arr[2] = "data3"; // 없는 index 에 무언가를 하려고 했다
      • NumberFormatException 숫자 변환 시 문자가 포함되어 있는 경우
      • 더보기
        // NumberFormatException : 숫자 형태가 아닌 문자열을 숫자로 변경하려고 할 경우
        // - 회원가입 할때 숫자 적는 칸에 문자 적는 인간들
        		String pw = "1234";
        		int var;
        		var = Integer.parseInt(pw);
        		System.out.println(var); // "1234" -> 1234(정수형) 으로 바뀌게 된다
        		
        		var = Integer.parseInt("1ab3");
        		System.out.println(var);
      • ClassCastException 매개 값으로 받은 타입의 종류를 알 수 없을 경우
      • 더보기
        // ClassCastException : 부모형태로 들어간 객체가 다시 되돌아 올때 잘못 되돌아온 경우
        		Object val = 1234; // Object는 java의 모든 객체가 다 들어간다
        		int intVal = (int) val; // 본래의 형태로 되돌아 가는건 문제 없음
        		String stringVal = (String) val; // 문자열로 되돌아 가려고 한다면?
        // NumberFormatException : 숫자 형태가 아닌 문자열을 숫자로 변경하려고 할 경우
        		//		- 회원가입 할때 숫자 적는 칸에 문자 적는 인간들
        		String pw = "1234";
        		int var;
        		var = Integer.parseInt(pw);
        		System.out.println(var); // "1234" -> 1234(정수형) 으로 바뀌게 된다
        		
        		var = Integer.parseInt("1ab3");
        		System.out.println(var);

    Try-catch

    try 영역 안에서 exception 발생시 catch 를 실행하는 구문이다 Finally 는 예외 발생시에도 실행할 코드를 작성한다

    try{
    	김 대리가 박 부장에게 보고서를 올린다;
    	보고서를 검토 한다;
    	문제 없으면 잘 했다고 한다;
    }catch(Exception e){
    	오류 부분 e 를 지적하고 다시 하라고 한다;
    	호통 친다;
    }finally{
    	자리로 들어 가라고 한다;
    }

    Try-catch 활용한 예제

    try 블록에서 예외가 발생하면 catch 로 넘어간다 마지막으로 실행해야하는 코드는 finally 에 작성한다

    더보기
    public class Main {
    
    	public static void main(String[] args) {
    		String data1 = "12345";
    		String data2 = "1234z";
    		// 사용자에게 어떤 입력이 들어올지는 모르겠지만
    		
    		try { // 문제 발생이 예상 되는 곳
    			int val1 = Integer.parseInt(data1);
    			int val2 = Integer.parseInt(data2);
    		} catch (NumberFormatException e) { // 예외 발생시 처리 내용
    			// 사용자에게 syso 으로 올바른 입력을 받도록 메시지 전달
    			System.out.println("숫자만 입력되어야 합니다");
    		} finally { // 무조건 실행되어야 하는 곳
    			System.out.println("data1 : " + data1);
    			System.out.println("data2 : " + data2);
    		}
    	}
    
    }

    예외는 공통적으로 Exception 을 상속 받는다

    모든 예외를 받아 내고 싶을 경우는 Exception 하나로 처리가 가능하다

     

    ★다형성 : 부모 형태에 자식 객체가 들어갈 수 있는거

    인터페이스 다형성 : 구현된 클래스가 인터페이스 안에 들어갈 수 있는거

     

    Throws, 예외를 던진다

    throws 는 호출한 객체에게 예외를 던진다

    method2() -> method1() -> main() -> JVM 에게 전가

    public class Main {
    	// JVM 에게 전가
    	public static void main(String[] args) throws NumberFormatException{
    		// 또는 내가 처리
    		try {
    			Sub sub = new Sub();
    			sub.method1();
    		} catch (Exception e) { // 예외에 대한 모든 정보가 e 객체에 다 들어가 있다
    			System.out.println("숫자만 입력 해야지");
    			System.out.println(e.toString());
    		}
    		
    		// sub 객체의 method1 메소드 호출
    		// 아무도 예외처리를 하지 않아서 JVM 에서 예외 발생 메시지가 떳다
    	}
    
    }
    
    public class Sub {
    	// main 에게 전가
    	void method1() throws NumberFormatException {
    		method2();// method1 에서 method2 메소드 호출
    	}
    	
    	// method1() 에게 예외처리를 전가
    	void method2() throws NumberFormatException {
    		Integer.parseInt("a1234");// method2 에서 예외 발생
    
    	}
    }

     

    '프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글

    10일차 - Java I/O  (0) 2024.02.05
    9일차 - Iterator  (0) 2024.02.02
    8일차 - 컬렉션 프레임워크  (0) 2024.02.01
    7일차 - String(스트링)  (0) 2024.01.31
    5일차 - 상속, 다형성  (0) 2024.01.29
Designed by Tistory.