UniCode
[이것이 자바다]CH10.예외처리(확인문제풀이) 본문
1. 예외에 대한 설명 중 틀린 것은 무엇입니까?
① 예외는 사용자의 잘못된 조작, 개발자의 잘못된 코딩으로 인한 프로그램 오류를 말한다.
② RuntimeException의 하위 예외는 컴파일러가 예외 처리 코드를 체크하지 않는다.
③ 예외는 try-catch 블록을 사용해서 처리된다.
④ 자바 표준 예외만 프로그램에서 처리할 수 있다.
☞ ④ 자바 표준 예외만 프로그램에서 처리할 수 있다.
자바 표준 API에서 제공하는 예외 클래스만으로는 다양한 종류의 예외를 표현할 수 없다. 애플리케이션 서비스와 관련된 예외를 애플리케이션 예외 또는 사용자 정의 예외라 하며 개발자가 직접 정의해서 만들고 사용할 수 있다.
2. try-catch-finally 블록에 대한 설명 중 틀린 것은 무엇입니까?
① try { } 블록에는 예외가 발생할 수 있는 코드를 작성한다.
② catch { } 블록은 try { } 블록에서 발생한 예외를 처리하는 블록이다.
③ try { } 블록에서 return문을 사용하면 finally { } 블록은 실행되지 않는다.
④ catch { } 블록은 예외의 종류별로 여러 개를 작성할 수 있다.
☞ ③ try { } 블록에서 return문을 사용하면 finally { } 블록은 실행되지 않는다.
finally{ } 블록은 예외 발생 여부와 상관없이 항상 실행되며 try { } , catch { } 블록에서 return문을 사용하더라도 finally 블록은 항상 실행된다.
3. throws에 대한 설명으로 틀린 것은 무엇입니까?
① 생성자나 메소드의 선언 끝 부분에 사용되어 내부에서 발생된 예외를 떠넘긴다.
② throws 뒤에는 떠넘겨야 할 예외를 쉼표(,)로 구분해서 기술한다.
③ 모든 예외를 떠넘기기 위해 간단하게 throws Exception으로 작성 할 수 있다.
④ 새로운 예외를 발생시키기 위해 사용된다.
☞ ④ 새로운 예외를 발생시키기 위해 사용된다.
throws 는 메소드 선언부 끝에 작성되어 메소드에서 처리하지 않은 예외를 호출한 곳으로 떠넘기는 역할을 한다.throw 는 강제적으로 예외를 발생시켜주는 역할을 한다ex) throw new Exception(); :> Exception예외 발생
4. throw에 대한 설명으로 틀린 것은 무엇입니까?
① 예외를 최초로 발생시키는 코드이다.
② 예외를 호출한 곳으로 떠넘기기 위해 메소드 선언부에 작성된다.
③ throw로 발생된 예외는 일반적으로 생성자나 메소드 선언부에 throws로 떠넘겨진다.
④ throw 키워드 뒤에는 예외 객체 생성 코드가 온다.
☞ ② 예외를 호출한 곳으로 떠넘기기 위해 메소드 선언부에 작성된다.
throws : 예외 떠넘기기throw : 예외 발생시키기
5. 다음과 같은 메소드가 잇을 때 예외를 잘못 처리한 것은 무엇입니까?
public void method1() throws NumberFormauException, ClassNotFoundException { ... } |
① try{ method1(); } catch (Exception e) { }
② void method2() throws Exception { method1(); }
③ try{ method1(); } catch (Exception e) { } catch (ClassNotFoundException e) { }
④ try{ method1(); } catch (ClassNotFoundException e) { } catch (NumberFormauException e) { }
☞ ③ try{ method1(); } catch (Exception e) { } catch (ClassNotFoundException e) { }하위 예외 클래스를 먼저 작성하고 상위클래스 예외 작성 > 왜냐하면 하위 예외는 상위 예외를 상속했기 때문에 상위 예외 타입도 되기 때문에 하위 예외 클래스를 나중에 작성할 시 먼저 상위 예외 클래스가 실행되어 하위 예외 클래스는 실행되지 않기 때문이다.
6. 다음 코드가 실행되었을 때 출력 결과는 무엇입니까?
public class TryCatchFinallyExample {
public static void main(String[] args){
String[] strArray = { "10" , "2a" };
int value = 0;
for(int i = 0; i <= 2; i++ ){
try{
value = Integer.parseInt(strArray[i]);
} catch(ArrayIndexOutOfBoundException e){
System.out.println("인덱스를 초과했음");
} catch(NumberFormatException e) {
System.out.println("숫자로 변환할 수 없음");
} finally {
System.out.println(value);
}
}
}
}
10 > value = strArray[0] = 10
숫자로 변환할 수 없음 > value = strArray[1] = 2a > 문자가 포함되어 예외 발생
10 > value = 10
인덱스를 초과했음 > strArray의 인덱스는 0, 1 뿐이므로 i가 2일 때 인덱스 초과 예외 발생
10 > value = 10
7. 로그인 기능을 Member 클래스의 login() 메소드에서 구현하려고 합니다. 존재하지 않는 ID를 입력했을 경우 NotExistIDException을 발생시키고, 잘못된 패스워드를 입력했을 경우 WrongPasswordException을 발생시키려고 합니다. LoginExample의 실행 결과를 보고 빈칸을 채워보세요
public class NotExistIDException extends Exception{
public NotExistIDException() {}
public NotExistIDException(String message) {
super(message);
}
}
public class WrongPasswordException extends Exception{
public WrongPasswordException() {}
public WrongPasswordException(String message) {
super(message);
}
}
public class LoginExample {
public static void main(String[] args) {
try {
login("white", "12345");
} catch (Exception e) {
System.out.println(e.getMessage());
}
try {
login("blue", "54321");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
public static void login(String id, String password) throws NotExistIDException, WrongPasswordException{
if(!id.equals("blue")) {
throw new NotExistIDException("아이디가 존재하지 않습니다.");
}
if(!password.equals("12345")) {
throw new WrongPasswordException("패스워드가 틀립니다.");
}
}
}
'이것이 자바다' 카테고리의 다른 글
[이것이 자바다]CH12.멀티 스레드(확인문제풀이) (0) | 2021.05.15 |
---|---|
[이것이 자바다] BankApplication (클래스메소드+예외처리) (0) | 2021.05.08 |
[이것이 자바다]CH09.중첩 클래스와 중첩 인터페이스(확인문제풀이) (0) | 2021.05.02 |
[이것이 자바다]CH08.인터페이스(확인문제풀이) (0) | 2021.05.02 |
[이것이 자바다]CH07.상속(확인문제풀이) (0) | 2021.04.05 |