你可以只写一个异常处理程序来捕获所有类型的异常。通过捕获异常类型的基类
Exception,就可以做到这一点(事实上还有其它的基类,但 Exception 是同编程活动
相关的基类。):
catch(Exception e) {
System.err.println("Caught an exception");
}
这将捕获所有异常,所以你最好把它放在处理程序列表的末尾,以防止它抢在其它处理
程序之前先把异常捕获了。
因为 Exception 是与编程有关的所有异常类的基类,所以它不会含有太多特定的信息,
不过你可以调用它从 Throwable 继承的方法:
String getMessage( )
String getLocalizedMessage( )
用来获取详细信息,或用本地语言表示的详细信息。
String toString( )
返回对 Throwable 的简单描述,要是有详细信息的话,也会把它包含在内。
void printStackTrace( )
void printStackTrace(PrintStream)
void printStackTrace(java.io.PrintWriter)
打印 Throwable 和 Throwable 的调用栈轨迹(call stack trace)。调用栈显示了“把
你带到异常抛出地点”的方法调用序列。此方法第一个版本输出到标准输出流,对后两
个版本你可以选择要输出的流(在第 12 章,你将学习这两种流的不同之处)。
Throwable fillInStackTrace( )
用于在 Throwable 对象的内部记录栈框架(stack frame)的当前状态。这在程序重新
抛出错误或异常(很快就会讲到)时很有用。
此外,你也可以使用 Throwable 从其基类 Object(也是所有类的基类)继承的方法。
对于异常来说,getClass( )也许是个很好用的方法,它将返回一个表示此对象类型的对
象。然后你可以使用 getName( )方法查询这个 Class 对象的名称。你还可以用这个
Class 对象做更多复杂的操作,不过对于异常处理而言,这已经足够了。
下面的例子演示了如何使用 Exception 类型的方法:
//: c09:ExceptionMethods.java
// Demonstrating the Exception Methods.
import com.bruceeckel.simpletest.*;
public class ExceptionMethods {
private static Test monitor = new Test();
public static void main(String[] args) {
try {
throw new Exception("My Exception");
} catch(Exception e) {
System.err.println("Caught Exception");
System.err.println("getMessage():" + e.getMessage());
System.err.println("getLocalizedMessage():" +
e.getLocalizedMessage());
System.err.println("toString():" + e);
System.err.println("printStackTrace():");
e.printStackTrace();
}
monitor.expect(new String[] {
"Caught Exception",
"getMessage():My Exception",
"getLocalizedMessage():My Exception",
"toString():java.lang.Exception: My Exception",
"printStackTrace():",
"java.lang.Exception: My Exception",
"%% \tat ExceptionMethods.main\\(.*\\)"
});
}
} ///:~
你会发现每个方法都比前一个提供了更多的信息----实际上它们每一个都是前一个的超
Exception,就可以做到这一点(事实上还有其它的基类,但 Exception 是同编程活动
相关的基类。):
catch(Exception e) {
System.err.println("Caught an exception");
}
这将捕获所有异常,所以你最好把它放在处理程序列表的末尾,以防止它抢在其它处理
程序之前先把异常捕获了。
因为 Exception 是与编程有关的所有异常类的基类,所以它不会含有太多特定的信息,
不过你可以调用它从 Throwable 继承的方法:
String getMessage( )
String getLocalizedMessage( )
用来获取详细信息,或用本地语言表示的详细信息。
String toString( )
返回对 Throwable 的简单描述,要是有详细信息的话,也会把它包含在内。
void printStackTrace( )
void printStackTrace(PrintStream)
void printStackTrace(java.io.PrintWriter)
打印 Throwable 和 Throwable 的调用栈轨迹(call stack trace)。调用栈显示了“把
你带到异常抛出地点”的方法调用序列。此方法第一个版本输出到标准输出流,对后两
个版本你可以选择要输出的流(在第 12 章,你将学习这两种流的不同之处)。
Throwable fillInStackTrace( )
用于在 Throwable 对象的内部记录栈框架(stack frame)的当前状态。这在程序重新
抛出错误或异常(很快就会讲到)时很有用。
此外,你也可以使用 Throwable 从其基类 Object(也是所有类的基类)继承的方法。
对于异常来说,getClass( )也许是个很好用的方法,它将返回一个表示此对象类型的对
象。然后你可以使用 getName( )方法查询这个 Class 对象的名称。你还可以用这个
Class 对象做更多复杂的操作,不过对于异常处理而言,这已经足够了。
下面的例子演示了如何使用 Exception 类型的方法:
//: c09:ExceptionMethods.java
// Demonstrating the Exception Methods.
import com.bruceeckel.simpletest.*;
public class ExceptionMethods {
private static Test monitor = new Test();
public static void main(String[] args) {
try {
throw new Exception("My Exception");
} catch(Exception e) {
System.err.println("Caught Exception");
System.err.println("getMessage():" + e.getMessage());
System.err.println("getLocalizedMessage():" +
e.getLocalizedMessage());
System.err.println("toString():" + e);
System.err.println("printStackTrace():");
e.printStackTrace();
}
monitor.expect(new String[] {
"Caught Exception",
"getMessage():My Exception",
"getLocalizedMessage():My Exception",
"toString():java.lang.Exception: My Exception",
"printStackTrace():",
"java.lang.Exception: My Exception",
"%% \tat ExceptionMethods.main\\(.*\\)"
});
}
} ///:~
你会发现每个方法都比前一个提供了更多的信息----实际上它们每一个都是前一个的超
集。