黑马程序员技术交流社区

标题: 关于RuntimeException的问题。 [打印本页]

作者: 王浩骅    时间: 2013-6-1 10:26
标题: 关于RuntimeException的问题。
本帖最后由 王浩骅 于 2013-6-1 20:33 编辑

听毕老师说了关于RuntimeException和关于Exception的问题。理解的还没是很透彻。请更明白的同学分享一下。

作者: 刘海芳    时间: 2013-6-1 10:45
说下自己的理解:
两者的区别简单的说:非RuntimeException的异常要自己写catch块处理掉。我列举出几个常见的execption你就发现他们的功能之处了。
  1. RuntimeException:
  2. 1、NullPointerException:见的最多了,其实很简单,一般都是在null对象上调用方法了。
  3. String s=null;
  4. boolean eq=s.equals(""); // NullPointerException
  5. public int getNumber(String str){
  6.   if(str.equals("A")) return 1;
  7.    else if(str.equals("B")) return 2;
  8. }
  9. 这个方法就有可能抛NullPointerException,发现了什么么?对就是无需自己手动的写try
  10. public int getNumber(String str){
  11.   if(str==null) throw new NullPointerException("参数不能为空");
  12. //你是否觉得明白多了
  13.   if(str.equals("A")) return 1;
  14.    else if(str.equals("B")) return 2;
  15. }
  16. 2、NumberFormatException:继承IllegalArgumentException,字符串转换为数字时出现。比如int i= Integer.parseInt("ab3");
  17. 3、ArrayIndexOutOfBoundsException:数组越界。比如 int[] a=new int[3]; int b=a[3];
  18. 4、StringIndexOutOfBoundsException:字符串越界。比如 String s="hello"; char c=s.chatAt(6);
  19. 5、ClassCastException:类型转换错误。比如 Object obj=new Object(); String s=(String)obj;
  20. 6、UnsupportedOperationException:该操作不被支持。如果我们希望不支持这个方法,可以抛出这个异常。既然不支持还要这个干吗?有可能子类中不想支持父类中有的方法,可以直接抛出这个异常。
  21. 7、ArithmeticException:算术错误,典型的就是0作为除数的时候。
  22. 8、IllegalArgumentException:非法参数,在把字符串转换成数字的时候经常出现的一个异常,我们可以在自己的程序中好好利用这个异常。
复制代码

作者: 廖志强    时间: 2013-6-1 12:16
error好像没有的 难道说的是编译错误?
Exception、RuntimeException都是exception
try{
}catch(Exception ex){
ex......
}
java.lang.Exception
------java.lang.RuntimeException

RuntimeException是运行时虚拟机的错误,不能被catch
例子如下
class ThrowsRuntimeException {
void excep() {
  int i = 10/0; // ArithmeticException
}
}
class ThrowsRuntimeExceptionDemo {
public static void main(String[] args) {
  ThrowsRuntimeException obj = new ThrowsRuntimeException();
  obj.excep();
}
}
不过可以这样捕捉
class ThrowsRuntimeException3 {
void excep() {
  int i = 10/0; // ArithmeticException
}
}
class ThrowsRuntimeExceptionDemo3 {
public static void main(String[] args) {
  ThrowsRuntimeException3 obj = new ThrowsRuntimeException3();
  try {
   obj.excep();
  } catch (ArithmeticException e) {
   System.out.println("算术例外");
   e.printStackTrace();
  }
  System.out.println("处理结束");
}
}
作者: 骑上最爱    时间: 2013-6-1 12:47
Exception定义的特点:当函数内容有throw抛出异常对象,并未进行try处理,必须要在函数上声明。掉用着可以进行任意方式的处理。

RuntimeException的特点:当函数内容有throw抛出异常对象,不需要进行处理,也不用声明在函数上,如果运行中系统检测到错误,就自动把程序停掉。
作者: 赵乐    时间: 2013-6-1 12:55
Exceptoin中有一个特殊的子类异常RuntimeException 运行时异常。

如果在函数内容抛出该异常,函数上可以不用声明,编译一样通过。

如果在函数上声明了该异常。调用者可以不用进行处理。编译一样通过;

之所以不用在函数声明,是因为不需要让调用者处理。
当该异常发生,希望程序停止。因为在运行时,出现了无法继续运算的情况,希望停止程序后,
对代码进行修正。

对于异常分两种:
1,编译时被检测的异常。
       
2,编译时不被检测的异常(运行时异常。RuntimeException以及其子类)



通俗点讲(自己看视频的理解),就是如果出现的异常(比如要查询学生年龄) 年龄肯定不能为负数。 这时候就用RuntimeException,如果使用此方法的人输入了负数,那么程序就会停止,也就是强制让使用者修改参数,
如果使用RuntimeException  函数上是不不要声明的,如果出现异常会自动交给JVM处理。    而其他异常  要么声明 throws   要么cry, catch   也就是要么抛出去,要出处理

作者: 殇_心。    时间: 2013-6-1 18:07
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2