======================================================
注:本文源代码点此下载
======================================================
public class loggingexceptions2 {
private static logger logger = logger.getlogger("loggingexceptions2");
static void logexception(exception e) {
stringwriter trace = new stringwriter();
e.printstacktrace(new printwriter(trace));
logger.severe(trace.tostring());
}
public static void main(string[] args) {
try {
throw new nullpointerexception();
} catch (nullpointerexception e) {
logexception(e);
}
}
}
***重新抛出异常
如果只是把当前异常对象重新抛出,那么printstacktrace()显示的将是原来异常抛出点的调用栈信息,而非重新抛出点的信息。想要更新此信息,可以采用 throw (exception)e.fillinstacktrace();
***异常链
在捕获一个异常后抛出另一个异常,并把原始异常的信息保存下来,称为异常链。throwable的子类中,三种基本的异常类提供了带cause参数的构造器(error exception runtimeexception),其他类型的异常,应该使用initcause()方法。
***java标准异常
throwable对象分为两种类型:error表示编译时和系统错误。exception是可以被抛出的基本类型。
***runtimeexception
运行时异常(包含runtimeexception及其子类)(不受检查异常)会自动被java虚拟机抛出,所以不必在异常说明中列出。这种异常属于错误,将被自动捕获。如果runtimeexception没有被捕获而直达main(),那么在程序退出前将调用异常的printstacktrace()方法。
runtimeexception代表的是编程错误:
1 无法预料的错误,比如在控制范围之外传递进来的null引用。
2 应该在代码中进行检查的错误。
***finally
用处:把除内存之外的资源恢复到初始状态,如打开的文件或网络连接,在屏幕上画的图形,外部世界的开关等。
异常丢失:
异常不应该被忽略。但它可以轻易地忽略。在try中抛出的异常未被catch之前,在finally中再抛出异常则会覆盖前一个异常,造成前一个异常的丢失。 从finally中return也会造成异常丢失(在finally中使用return方法会silence所有抛出的exception)。
***异常限制
在继承结构中,子类的构造函数必须包含父类构造函数的异常声明。派生类的构造器不能捕获基类构造器抛出的异常。
子类覆盖的方法的异常声明必须是父类的异常声明的子集(或父类异常声明的派生类异常)。对象的可替换性得到了保证。
======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/