A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 颜宗茂 黑马帝   /  2011-12-28 21:21  /  1851 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 颜宗茂 于 2011-12-29 21:01 编辑

RumtimeException能被捕获处理吗??

3 个回复

倒序浏览
java中异常分两类,一类是需要处理的(Checked exceptions), 一类是不需要处理的(Unchecked exceptions)。
从逻辑的角度来说,checked exceptions和runtime exception是有不同的使用目的的。checked exception用来指示一种调用方能够直接处理的异常情况。而runtime exception则用来指示一种调用方本身无法处理或恢复的程序错误。

  checked exception迫使你捕获它并处理这种异常情况。以java.net.URL类的构建器(constructor)为例,它的每一个构建器都会抛出MalformedURLException。MalformedURLException就是一种checked exception。设想一下,你有一个简单的程序,用来提示用户输入一个URL,然后通过这个URL去下载一个网页。如果用户输入的URL有错误,构建器就会抛出一个exception。既然这个exception是checked exception,你的程序就可以捕获它并正确处理:比如说提示用户重新输入。

  再看下面这个例子:

Java代码  
1.public void method(){   
2. int [] numbers = { 1, 2, 3 };   
3. int sum = numbers[0] + numbers[3];   
4.}   
public void method(){
 int [] numbers = { 1, 2, 3 };
 int sum = numbers[0] + numbers[3];
}


  在运行方法method()时会遇到ArrayIndexOutOfBoundsException(因为数组numbers的成员是从0到2)。对于这个异常,调用方无法处理/纠正。这个方法就是runtime exception的情形。上面我已经提到,runtime exception用来指示一种调用方本身无法处理/恢复的程序错误。而程序错误通常是无法在运行过程中处理的,必须改正程序代码。

  总而言之,在程序的运行过程中一个checked exception被抛出的时候,只有能够适当处理这个异常的调用方才应该用try/catch来捕获它。而对于runtime exception,则不应当在程序中捕获它。如果你要捕获它的话,你就会冒这样一个风险:程序代码的错误(bug)被掩盖在运行当中无法被察觉。因为在程序测试过程中,系统打印出来的调用堆栈路径(StackTrace)往往使你更快找到并修改代码中的错误。有些程序员建议捕获runtime exception并纪录在log中,我反对这样做。这样做的坏处是你必须通过浏览log来找出问题,而用来测试程序的测试系统(比如Unit Test)却无法直接捕获问题并报告出来。
回复 使用道具 举报
曾运 黑马帝 2011-12-28 21:51:41
藤椅
RumtimeException 可以被捕获处理。
  1. public class RuntimeExceptionDemo
  2. {


  3.         public static void main(String[] args)
  4.         {  
  5.                 int  a[]=new int[2];
  6.                
  7.                 try
  8.                 {   
  9.                         a[2]=2;//发生异常
  10.                 } catch (ArrayIndexOutOfBoundsException e)
  11.                 {
  12.                         a[0]=0;
  13.                         a[1]=1;
  14.                 }
  15.                 System.out.println("over");//进行捕获后,程序会继续往下执行,输出“over”

  16.         }

  17. }
复制代码
回复 使用道具 举报
曾运 发表于 2011-12-28 21:51
RumtimeException 可以被捕获处理。

那就是被抓住了, 也是,这个方法挺好。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马