Cute Running Puppy

Java

Java_17Day

jwjin 2019. 4. 9. 23:27
728x90

# 예외

자바 예외(Exception) 처리(Handing)
  
1. 예외란 : 예외는 프로그램이 실행중에 예기치 못한 에러 상황을 통틀어 말합니다. 여기서 주목 해야 할 부분은 컴파일시가 아닌 실행시 입니다.
때문에 컴파일러는 예외가 발생할 지 여부를 알지 못하기에 컴파일 에러를 유발하지 않습니다. 단 , 알려진 예외인 경우는 제외함!  프로그램이 실행 중에 위처럼 예외가 발생하면 해당 예외가 발생된 곳에서 자신을 호출 한 쪽으로  발생된 예외 객체를 던집니다(throw). 이처럼 던져진 예외는 호출 구조에 따라 최종적으로는 main() 까지 올라오게 되고 어느쪽에서건 핸들링을 하지 않을 경우 프로그램은 비정상적으로 종료됩니다.
이때 VM 은 발생된 예외를 tracing 할 수 있도록 stack 을 쫓아서 출력을 해줍니다(stackTracing)
이처럼 예기치 못한 실행 오류를 통틀어 예외라 하고 예외가 발생되면 예외 객체가 생성되면 그 예외 객체에는 예외의 내용을 담고 있습니다.


2. 예외의 계층 : 최상위 클래스는 Exception 이고 Object 의 직하위 클래스 입니다.
3. 예외는 발생 할 수도 아닐 수도 있는 존재이며 반드시 발생될거라 예상되는 예외를 checked (알려진)예외 타입이라 합니다.
4. 발생될 지 여부를 알 수 없는 예외 타입은 Unchecked 예외 타입이라 하고 RuntimeException 의
하위 클래스들이 이에 속합니다.
5. 예외가 발생되면 예외가 throw 되었다 하는데 , throw 는 던져진다는 의미입니다. 던져진 예외를 잡는 행위를 예외 핸들링이라 하고 구문으로는 try{}catch{} 로 처리합니다.
6. 예외를 전가(throws) 할 수 있는데, 이때 알려진 예외 타입들은 throws 하거나 핸들링을 하지 않을 경우 컴파일 에러가 발생합니다.(단 알려진 예외 타입만..)

던져진 예외를 잡는 try{}catch(){} 구문의 특징 입니다.

try{}catch(){}
예외를 핸들링 하는 구문.. 예외가 발생할 만한 코드를 try{} 내에 정의하고 발생된 예외는 catch() 절에서 잡는 형식입니다. 만약 예외가 실제 발생하면 catch 절에서 잡았기 때문에 예외는 프로그램내에 머물게 됩니다. 즉 프로그램은 정상적으로 실행된다는 의미입니다.
try{} 내에서 선언된 변수등은 지역으로 인식하기 때문에 만약 전역에서(예를 들면 catch 절에서 사용시) 사용 할 경우
try 구문 밖에서 선언해야 합니다.
catch() 괄호 내에는 발생될 가능성이 있는 예외 타입을 선언해야 합니다. 즉 예외가 발생되면 예외 객체가 VM 으로 부터 던져지기 때문에 해당 객체의 클래스 타입 또는 큰타입을 파라미터로 넣어 잡아내야 한다는 의미이다. 이때 클래스 타입의 변수를 선언하는데 이 변수는 발생된 객체의 ref 변수로 활용되어서 이 ref 변수를 이용하여 Throwable 로 부터 상속받은 예외 내용등의 메서드를 이용할 수 있습니다.
만약 try 절 내에 하나 이상의 다른 타입의 예외가 발생될 가능성이 있다면 다중의 catch() 를 이용해서 각각 잡아내야 합니다. 순서는 작은 타입부터 큰타입으로 나열 되어야 하며 , 반대인 경우엔 컴파일 에러입니다.
상속 관계에 있는 다중의 catch 일 경우엔 Super 타입의 catch 한번으로도 핸들 가능하지만 , 정확한 예외를 알 수 없다는 단점이 있습니다.

 

728x90

'Java' 카테고리의 다른 글

Java_19Day  (0) 2019.04.12
Java_18Day  (0) 2019.04.11
Java_16Day  (0) 2019.04.08
Java_15Day  (0) 2019.04.05
Java_14Day  (0) 2019.04.04