필요한 Exception이 기존의 Exception에 없는 경우 사용자가 Exception을 직접 생성하고 Exception을 발생시킬 수 있다.
//홀수일때 발생시킬 예외 직접 작성
class FindOddException extends Exception {
public FindOddException() {
System.out.println("FindOddException Default Constructor");
}
public void findOdd(int number) throws FindOddException { //throws 키워드를 통해 발생 할 수 있는 예외 명시
if(number % 2 == 0) {
System.out.println("짝수입니다.");
}else {
throw new FindOddException(); //throw 키워드를 통해 number가 홀수이면 예외 발생
}
}
}
oracle document에 명시되어있는 내용을 보면 "Anonymous classs는 선언과 인스턴스화를 동시에 가능하게 하며 일반 local class처럼 보이지만 이름을 가지지 않는다, 코드를 더욱 간결하게 해주며
local class를 한 번만 사용하고 싶을 때 사용해라"로 Anonymous class를 정의하고 있다.
첫번째 anonymous라면 컴파일시 "class이름"$1.class로 class파일이 생성된다.
java의 class파일로부터 외부로부터 자원을 입출력하고 싶을 때 사용하는 bean들을 모아놓은 패키지이다.
1. Inputstream/OutputStream
Q1. 속성을 변경하지 않기에 static method로 바꿀 수 있다.
A. static method 내부에서는 static이 아닌 field들을 사용할 수 없다. 따라서 인스턴스의 속성들을 변경하지 못하기에 필드값을 변경하는 것이 아닌 값을 받아 로직을 실행하는 메서드이면 static으로
변경 할 수 있다.
Q2. char c = ('a' - 23)
대신 char c = ((int)'a' - 23)
가능한 이유
A. 정수와 정수의 연산은 int로 묵시적 형 변환이 발생한다. char은 내부적으로 정수로 관리되기에 (int)'a'
로 명시적 형 변환을 해주지 않아도 연산이 가능하다.
Q3. throw, throws 차이
A. throw는 Exception을 발생시킬 때 사용하는 키워드로 로직을 실행하다 예상치 못한 일이 발생하였을 때 Exception을 발생시켜 예외를 처리하게 한다.
throws는 메소드를 정의할 때 사용하는 키워드로 해당 메서드가 잠재적으로 발생시킬 수 있는 Exception을 알려준다.