프로그램 오류

정태규·2022년 9월 30일
1

자바의 정석

목록 보기
3/4

프로그램 오류

  • 컴파일 에러 : 컴파일 할 때 발생하는 에러

    • 자바 컴파일러가 하는일

      1. 구문체크
      2. 번역
      3. 최적화
      4. 생략된 코드추가
    • .c 파일이 만들어지지 않음

  • 런타임 에러 : 실행 할 때 발생하는 에러

    • 프로그램 종료
      -java의 런타임 에러
      - 에러(error) :프로그램 코드에 의해서 수습될 수 없는 심각한 오류
      - 예외(exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류
  • 논리적 에러 : 작성 의도와 다르게 동작

  • 에러는 어쩔 수 없지만 예외는 처리하자

  • 예외 처리의 정의와 목적

    • 정의 : 프로그램 실행 시 발생 할 수 있는 예외의 발생에 대비한 코드를 작성하는것

    • 목적 : 프로그램의 비정상 종료를 막고, 정상적인 실행상태를 유지하는 것

    • 예외 클래스의 계층 구조

      Throwable : 모든 오류의 조상
      Exception : 미약한 오류
      Error : 심각한 오류

Exception과 RuntimeException

  • Exception클래스들
    • 사용자의 실수와 같은 외적인 요인에 의해 발생하는 예외
    • IOException : 입출력 예외
    • ClassNotFoundException : 클래스가 존재 x
  • RuntimeException 클래스들
    • 프로그래머의 실수로 발생하는 예외
    • ArithmeticException : 산술계산 예외
    • ClassCastException :형변환
    • NullPointerException : 널포인터
    • IndexOutOfBoundException : 배열 범위 벗어남

예외 처리하기 try-catch문

try{ //if문은 한줄일때 {}생략 가능하지만,try-catch문은{} 생략불가

	//예외가 발생할 가능성이 있는 문장들을 넣는다.ex)쇼핑
}catch(Exception1 e1){
	//Exception1이 발생했을경우, 이를 처리하기 위한 문장을 적는다.ex)돈이부족
}catch(Exception2 e2){
	//Exception2가 발생했을경우,이를 처리하기 위한 문장을 적는다.ex)물건부족 
}catch(ExceptionN eN){
	//ExceptionN이 발생했을경우,이를 처리하기 위한 문장을 적는다.ex)가게 문닫음 
}
class Ex8_1{
	public static void main(String args[]){
    	System.out.println(1);
        try{
        	System.out.println(2);
            System.out.println(3);
        } catch(Exception e){
        	System.out.println(4);
        }
        System.out.println(5);
    }
}
결과
1
2
3

Exception이 발생하지 않았기 때문에 1235가 실행됨.

class Ex8_1{
	public static void main(String args[]){
    	System.out.println(1);
        try{
        	System.out.println(0/0);
            System.out.println(2);
        } catch(ArithmeticException ae){
        	System.out.println(3);
        }
        System.out.println(4);
    }
}
결과 
1
3
4

0/0은 할수 없으므로, ArithmeticException 발생

class Ex8_4{
	public static void main(String args[]){
    	System.out.println(1);
        System.out.println(2);
        try{
        	System.out.println(3);
            System.out.println(0/0); //0으로 나눠서 ArithmeticException 발생시킨다.
            System.out.println(4);
        } catch(ArithmeticException ae){
        	if(ae instanceof ArithmeticException)
            	System.out.println("true");
            System.out.println("ArithmeticException");    
        } catch(Exception e){
        	System.out.println("Exception");//ArithmeticException을 제외한 모든 예외를 처리한다. //모든 예외의 최고조상, 모든예외 처리 가능
        }
        System.out.println(6);
    }
}

예외가 발생하면, 이를 처리할 catch블럭을 찾아 내려감
일치하는 catch블럭이 없으면, 예외는 처리 안됨
Exception이 선언된 catch블럭은 모든 예외 처리(마지막 catch블럭으로 쓰임)

출처 : https://www.youtube.com/user/MasterNKS

0개의 댓글