捕获所有异常

你可以只写一个异常处理程序来捕获所有类型的异常。通过捕获异常类型的基类
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\\(.*\\)"
    });
  }
} ///:~


你会发现每个方法都比前一个提供了更多的信息----实际上它们每一个都是前一个的超

集。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值