根基违例
“违例条件”暗示在呈现什么问题的时候应中止要领或浸染域的继承。为了将违例条件与普通问题区分隔,违例条件长短常重要的一个因素。在普通问题的环境下,我们在内地已拥有足够的信息,可在某种水平上办理遇到的问题。而在违例条件的环境下,却无法继承下去,因为内地没有提供办理问题所需的足够多的信息。此时,我们能做的独一工作就是跳出内地情况,将谁人问题委托给一个更高级的认真人。这即是呈现违例时呈现的环境。
一个简朴的例子是“除法”。如大概被零除,就有须要举办查抄,确保措施不会冒进,并在那种环境下执行除法。但详细通过什么知道分母是零呢?在谁人特定的要领里,在我们试图办理的谁人问题的情况中,我们或者知道该如何看待一个零分母。但如果它是一个没有预推测的值,就不能对其举办处理惩罚,所以必需发生一个违例,而非掉臂一切地继承执行下去。
发生一个违例时,会产生几件工作。首先,凭据与建设Java工具一样的要领建设违例工具:在内存“堆”里,利用new来建设。随后,遏制当前执行路径(记着不行沿这条路径继承下去),然后从当前的情况中释放出违例工具的句柄。此时,违例节制机制会经受一切,并开始查找一个得当的处所,用于继承措施的执行。这个得当的处所即是“违例节制器”,它的职责是从问题中规复,使措施要么实验另一条执行路径,要么简朴地继承。
作为发生违例的一个简朴示例,各人可思考一个名为t的工具句柄。有些时候,措施大概通报一个尚未初始化的句柄。所以在用谁人工具句柄挪用一个要领之前,最好举办一番查抄。可将与错误有关的信息发送到一个更大的场景中,要领是建设一个非凡的工具,用它代表我们的信息,并将其“掷”(Throw)出我们当前的场景之外。这就叫作“发生一个违例”可能“掷出一个违例”。下面是它的或许形式:
if(t == null)
throw new NullPointerException();
这样便“掷”出了一个违例。在当前场景中,它使我们能放弃进一步办理该问题的诡计。该问题会被转移到其他更得当的处所办理。精确地说,谁人处所不久就会显暴露来。