JAVA 프로그래밍 9.2
Defining your own Exception classes
constructors
사용자가 만든 exception은 Exception 클래스의 child Class 라는 것을 꼭 기억하기
우리가 할 것은 Constructor만 만드는 것이다!!
Exception을 생성해 던지게 되는 문자열은 Object안에 존재하는 instance 변수에 저장이 되고 getMessage 메소드를 통해서 리턴을 하게 된다.
general 하게 미리 작성된 Exception으로 던지게 되면 catch block에서 general 한 Exception으로 받고
만약 사용자가 작성한 Exception으로 던지면 사용자가 작성한 specifical 한 exception 으로 받으면 된다.
여기서도 마찬가지로 "Is a relation"이 성립한다,
사용자가 작성한 Specify된 exception으로 던지고 general한 Exception으로 받게 되도 성립한다는 얘기
JVM, program, JVM
Error는 Throwable의 subClass이고 Java Virtual Machine에서 throw 해준다.
Exception은 program에 의해서 throw 해지고 사용자가 만든 모든 exception은 Exception 의 sub class 가 된다.
RuntimeException은 JVM에 의해서 throw되고 Exception의 subClass이다.
Unchecked Exception
: 컴파일을 할 때 error인지 error가 아닌지 체크하지 않는다. 즉, error와 run-time exception에 해당하는 에러들은 컴파일러가 체크를 하지 않는다. 에러가 있어도 그냥 넘어가게 된다.
Checked Exception
: 컴파일러가 체크를 하고 에러가 있으면 바로 에러 메시지를 때린다."must be caught or declared in the throw clause" 에러문이 뜬다. 가장 대표적인 것이 IOException이다.
throws가 있다면 메소드를 사용하는 측에서 반드시 try-catch를 진행해서 프로그램을 작성해야 한다. 이것을 Checked Exception이라고 한다.
NumberformatException이 발생한다.
run-time error이고 컴파일을 할때 에러를 잡아내지 못하지만 다른 형식이 주어지면 다음과 같은 에러 메시지를 출력하게 된다.
다음과 같이 catch block에서 에러메시지 문장을 바꾼다면 에러창에 뜨는 메시지를 바꿀 수 있다.