当前位置:天才代写 > tutorial > JAVA 教程 > 违例匹配

违例匹配

2017-11-13 08:00 星期一 所属: JAVA 教程 浏览:398

“掷”出一个违例后,违例节制系统会按当初编写的顺序搜索“最靠近”的节制器。一旦找到相符的节制器,就认为违例已获得节制,不再举办更多的搜索事情。
在违例和它的节制器之间,并不需要很是准确的匹配。一个衍生类工具可与基本类的一个节制器相配,如下例所示:
 

//: Human.java
// Catching Exception Hierarchies

class Annoyance extends Exception {}
class Sneeze extends Annoyance {}

public class Human {
  public static void main(String[] args) {
    try {
      throw new Sneeze();
    } catch(Sneeze s) {
      System.out.println("Caught Sneeze");
    } catch(Annoyance a) {
      System.out.println("Caught Annoyance");
    }
  }
} ///:~

Sneeze违例会被相符的第一个catch从句捕捉。虽然,这只是第一个。然而,如果我们删除第一个catch从句:
 

    try {
      throw new Sneeze();
    } catch(Annoyance a) {
      System.out.println("Caught Annoyance");
    }

那么剩下的catch从句依然可以或许事情,因为它捕捉的是Sneeze的基本类。换言之,catch(Annoyance e)能捕捉一个Annoyance以及从它衍生的任何类。这一点很是重要,因为一旦我们抉择为一个要领添加更多的违例,并且它们都是从沟通的基本类担任的,那么客户措施员的代码就不需要变动。至少可以或许假定它们捕捉的是基本类。
若将基本类捕捉从句置于第一位,试图“屏蔽”衍生类违例,就象下面这样:
 

    try {
      throw new Sneeze();
    } catch(Annoyance a) {
      System.out.println("Caught Annoyance");
    } catch(Sneeze s) {
      System.out.println("Caught Sneeze");
    }

则编译器会发生一条堕落动静,因为它发明永远不行能抵达Sneeze捕捉从句。

 

    关键字:

天才代写-代写联系方式