Exception's principle: Only have exceptions happened, use it, do not to use it control work flow, for three reasons:
1.when JVM optimize some common operation(e.g. for circle), when we use exception to instead it, JVM won't do optimize.
2. None of JVM used to optimize exception now.
3. Create and throw exception will take some JVM resources.
4. Hard to understand bussiness logic(my understanding).
There is three kinds of Exception: Exception, RuntimeException, Error.
Exception: Checked exception.
RuntimeException: program error.
Error: For environment error, JVM will handle it or define it.
Error and RuntimeException 在表現形式上沒有區別, 代表出錯邏輯不同。
We should document the exception and don't catch or throw "Exception".
Exception can be pass to high level throw transmit(轉義), it means we can transmate one kind exception(JDK exception) to another kind of exception(Bussiness exception).
If we want to store the low level exception, can pass low level exception information throw "Exception chain", before JDK1.4, we should implemnts it by ourselves, we define a Throw field in our custom exception, and store the low level exception as its part, After JDK1.4, we can pass low level exception throw Construct.
Two way to instead of exception: Return a value, get a "testing method"(Iterator.hasnext()).如果有狀態相關的方法, 最好有測試狀態相關的代碼。
User common exception like IllegalArgumentException, IllegalStateException, NullPointerException...