意外处理的丢失

意外捕捉是按照类型进行匹配的。已经捕捉到的意外，除非继续抛出，否则，不会被上层的意外处理机制进行处理。因此如果意外类中存在继承关系，应该首先捕捉子类意外，然后捕捉父类意外，否则的话，子类意外将被向上转型为父类进行处理，造成意外的丢失。还有在我们采用finally从句的情况下，意外处理的丢失也特别容易出现，比如：

1. class MyException1 extends Exception {

2. public String toString() {

3. return "MyException1 !";

4. }

5. }

6. class MyException2 extends Exception {

7. public String toString() {

8. return "MyException2 !";

9. }

10. }

11. public class LostMessage {

12. void E1() throws MyException1 {

13. throw new MyException1();

14. }

15. void E2() throws MyException2{

16. throw new MyException2();

17. }

18. public static void main(String[] args) throws Exception {

19. LostMessage lm = new LostMessage();

20. try {

21. lm.E1();

22. } finally {

23. lm.E2();

24. }

25. }

26. }

输出如下：

A trivial exception

at LostMessage.E2(LostMessage.java:21)

at LostMessage.main(LostMessage.java:29)

从上面的代码中我们可以看出java中丢失意外是如此容易，而这个正是java意外处理的不足之处。