搞懂Java例外處理的難題:Checked與Unchecked Exceptions不再是問題10. • Correctness
– Contract Specification(超出範圍)
• Robustness
– Exception Handling
Copyright@2013 Teddysoft
12. Checked
Exception
Throwable
Unchecked
Exception
Exception Error
RuntimeException
Copyright@2013 Teddysoft
16. • Checked exceptions for recoverable
conditions
– 打死不知道要如何去recover 任何東東?
class FileService {
… backup () {
FileService fs = new
public copy (String s) FileService();
throws IOException { try {
… fs.copy(“a.txt”);
if (error) }
throw new catch (IOException e){
IOException(“reason”); // exception handling code
} }
} }
Copyright@2013 Teddysoft
17. 1
2
3
Copyright@2013 Teddysoft
18. 1
2
3
Copyright@2013 Teddysoft
19. • 我就是不喜歡checked exception,咬我啊!
• 例如,Standard Widget Toolkit (SWT,
Eclipse的UI元件)只使用unchecked
exception:
– SWTException用來表示可修復的SWT錯誤。
– SWTError則用來表示不可修復的錯誤。
Copyright@2013 Teddysoft
20. Your
application
Spring
DataAccessException unchecked
Framework
checked
Java SQLException HibernateException
technology-
technology-
specific
specific
Copyright@2013 Teddysoft
22. • Exception Type
• Recoverability
• Application Context
• Robustness Level
– G1: Error-reporting (錯誤回報)
– G2: State-recovery (狀態回復)
– G3: Behavior-recovery (行為回復)
• Exception Handling Policy
Copyright@2013 Teddysoft
25. 練習1: 如果Accepter收到一
Message
Presentation
Layer
E'' 5. report
個 IOException,鄉民們第
一個反應是什麼?
AppWin
Application E' 4. wrap
Layer
GameServer
Service Layer
3. recover
E 2. rethrow
練習2: 如果Accepter收到
Acceptor 一個 RuntimeException,
鄉民們第一個反應是什麼?
JVM E 1. throw
Copyright@2013 Teddysoft
26. Message 練習3: 如果Accepter收到一
Presentation E'' 5. report
個 IOException,鄉民們該
Layer
AppWin 如何處置?
Application E' 4. wrap
Layer
GameServer
3. recover
Service Layer E 2. rethrow
練習4: 如果Accepter收到
Acceptor
一個 RuntimeException,
JVM E 1. throw
鄉民們該如何處置?
Copyright@2013 Teddysoft
27. Message 練習5: 如果Accepter收到一
Presentation E'' 5. report
個 IOException,鄉民們該
Layer
AppWin 如何處置?
Application E' 4. wrap
Layer
GameServer
3. recover 練習6: 如果GameServer收
Service Layer E 2. rethrow
Acceptor
到 IOException ,鄉民們該
如何處置?
JVM E 1. throw
Copyright@2013 Teddysoft
28. Message
Presentation
Layer
E'' 5. report
練習7: Accepter的RL要
AppWin
E' 4. wrap
設為多少?
Application
Layer
GameServer
3. recover
Service Layer E 2. rethrow
練習8: GameServer的RL
Acceptor
要設為多少?
JVM E 1. throw
Copyright@2013 Teddysoft
29. Message
Presentation
Layer
E'' 5. report
練習9: Acceptor這一層
AppWin
有哪些policy可用?
Application E' 4. wrap
Layer
GameServer
3. recover
Service Layer E 2. rethrow
Acceptor 練習10: GameServer這
JVM
一層有哪些policy可用?
E 1. throw
Copyright@2013 Teddysoft