- Exception1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
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을 사용하여 그 사실을(즉, 파라미터가 양수라는 것을) 명시할 수 있다.)참고 : http://javacan.tistory.com/entry/79, https://www3.ntu.edu.sg/home/ehchua/programming/java/J5a_ExceptionAssert.html123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354// 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);
}
}
'Programing > Java' 카테고리의 다른 글
Effective Java - Annotation (0) | 2016.03.08 |
---|---|
Effective Java - Reflection (0) | 2016.03.08 |
Effective Java - 스레드(2) (0) | 2016.03.07 |
Effective Java - 스레드(1) (0) | 2016.03.07 |
Effective Java - 불변 객체 (0) | 2016.03.07 |