Programing/Java
Effective Java - Exception
안중환
2016. 3. 9. 16:14
- Exception
package kr.co.ioacademy; // 자바의 예외 3가지 // 1. 점검 지정 예외 : 복구가 가능한 상황 // 2. 무점검 지정 예외 : 복구가 불가능한 상황 // 1) 실행 시점 예외(Runtime Exception) - 사용자 // 2) 오류(Error) - JVM // API 사용자에게 점검 지정 예외를 준다는 것은 그 상태를 복구할 권한을 준다는 것이다. // (무시할 수 있지만 무시하면 안된다) // 실행 시점 예외와 오류의 동작 방식은 동일하다. // -> 둘다 catch 할 필요가 없다. 처리해서도 안된다. class Engine {} class Car { private static Class<Engine> engineClass = Engine.class; // private Engine engine = engineClass.newInstance(); // // 2. 인스턴스 필드의 초기화에서 발생하는 예외는 생성자에서 처리해야 한다. // public Car() throws Exception { // } private Engine engine = newEngine(); private static Engine newEngine() { try { return engineClass.newInstance(); } catch (InstantiationException | IllegalAccessException e) { e.printStackTrace(); } return null; } /* // 1. 인스턴스 필드가 생성자 호출보다 먼저 일어난다. private Car instance = new Car(); public Car() throws Exception { throw new Exception("Failed to create"); } */ } public class Example9 { public static void main(String[] args) { try { Car car = new Car(); System.out.println("Succeed"); } catch (Exception e) { System.out.println("Failed"); } } }
Assertion
: jdk 1.4부터 도입
: Assertion은 불리언 식(expression)을 포함하고 있는 문장으로서, 프로그래머는 그 문장이 실행될 경우 불리언 식이 참이라고 단언할 수 있다. (JSR, Java Specification Request)
: Assertion은 개발자가 참이라고 가정하는 상태를 명시하기 위해서 사용된다. (예를 들어, 어떤 메소드가 파라미터로 양수만 입력받아야 한다고 확신한다면, Assertion을 사용하여 그 사실을(즉, 파라미터가 양수라는 것을) 명시할 수 있다.)// jdk 1.4 // javac -source 1.4 AssertionTest.java // JRE 클래스가 Assertion을 포함하는지 여부에 상관없이 기본적으로 Assertion 기능을 사용하지 않는다. // java -ea AssertionTest // 문법 // assert [boolean 식]; // assert [boolean 식]:[표현식]; // 사용해선 안 되는 경우 // public 메소드의 파라미터를 검사하는 경우 // 올바른 수행을 위해 필요한 작업을 수행하는 경우 // ex) assert checkName(); -> boolean checked = checkName(); // assert checked; public class AssertionTest { // Assert 기능 강제적으로 사용하도록 유도 static { boolean assertsEnabled = false; assert assertsEnabled = true; if (!assertsEnabled) throw new RuntimeException("Assertion 기능이 사용가능해야 합니다!"); } /* // post-condition check Object getObj(Object obj) { assert obj != null : "obj cannot be null"; return obj; } // pre-condition check void register(MemberInfo member) { assert Member != null:"MemberInfo cannot be null"; assert member.getId() != null && !member.getId().equals(""); ... } */ public static void main(String[] args) { char operator = '%'; // assumed either '+', '-', '*', '/' only int operand1 = 5, operand2 = 6, result = 0; switch (operator) { case '+': result = operand1 + operand2; break; case '-': result = operand1 - operand2; break; case '*': result = operand1 * operand2; break; case '/': result = operand1 / operand2; break; default: assert false : "Unknown operator: " + operator; // not plausible here } System.out.println(operand1 + " " + operator + " " + operand2 + " = " + result); } }
참고 : http://javacan.tistory.com/entry/79, https://www3.ntu.edu.sg/home/ehchua/programming/java/J5a_ExceptionAssert.html