捕捉所有违例
我们可建设一个节制器,令其捕捉所有范例的违例。详细的做法是捕捉基本类违例范例Exception(也存在其他范例的基本违例,但Exception是合用于险些所有编程勾当的基本)。如下所示:
catch(Exception e) {
System.out.println("caught an exception");
}
这段代码能捕捉任何违例,所以在实际利用时最好将其置于节制器列表的末端,防备跟从在后头的任何非凡违例节制器失效。
对付措施员常用的所有违例类来说,由于Exception类是它们的基本,所以我们不会得到关于违例太多的信息,但可挪用来自它的基本类Throwable的要领:
String getMessage()
得到具体的动静。
String toString()
返回对Throwable的一段扼要说明,个中包罗具体的动静(假如有的话)。
void printStackTrace()
void printStackTrace(PrintStream)
打印出Throwable和Throwable的挪用仓库路径。挪用仓库显示出将我们带到违例产生所在的要领挪用的顺序。
第一个版本会打印出尺度错误,第二个则打印出我们的选择流程。若在Windows下事情,就不能重定向尺度错误。因此,我们一般愿意利用第二个版本,并将功效送给System.out;这样一来,输出就可重定向到我们但愿的任何路径。
除此以外,我们还可从Throwable的基本类Object(所有工具的基本范例)得到别的一些要领。对付违例节制来说,个中一个大概有用的是getClass(),它的浸染是返回一个工具,用它代表这个工具的类。我们可依次用getName()或toString()查询这个Class类的名字。亦可对Class工具举办一些巨大的操纵,尽量那些操纵在违例节制中是不须要的。本章稍后还会具体报告Class工具。
下面是一个非凡的例子,它展示了Exception要领的利用(若执行该措施碰着坚苦,请参考第3章3.1.2小节“赋值”):
//: ExceptionMethods.java // Demonstrating the Exception Methods package c09; public class ExceptionMethods { public static void main(String[] args) { try { throw new Exception("Here's my Exception"); } catch(Exception e) { System.out.println("Caught Exception"); System.out.println( "e.getMessage(): " + e.getMessage()); System.out.println( "e.toString(): " + e.toString()); System.out.println("e.printStackTrace():"); e.printStackTrace(); } } } ///:~
该措施输出如下:
Caught Exception e.getMessage(): Here's my Exception e.toString(): java.lang.Exception: Here's my Exception e.printStackTrace(): java.lang.Exception: Here's my Exception at ExceptionMethods.main
可以看到,该要领持续提供了大量信息——每类信息都是前一类信息的一个子集。