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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩秀山 中级黑马   /  2013-5-17 00:29  /  954 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么 runtimeexception异常 不需要try catch???

3 个回复

倒序浏览
RuntimeException——它在默认情况下会自动得到处理。
若必须检查RuntimeException,我们的代码就会变得相当繁复。在我们自己的包里,可选择“掷”出一部分RuntimeException。
如果不捕获这些违例,又会出现什么情况呢?由于编译器并不强制违例规范捕获它们,所以假如不捕获的话,一个RuntimeException可能过滤掉我们到达main()方法的所有途径。为体会此时发生的事情,请试试下面这个例子:
  1. public class NeverCaught {
  2.   static void f() {
  3.     throw new RuntimeException("From f()");
  4.   }
  5.   static void g() {
  6.     f();
  7.   }
  8.   public static void main(String[] args) {
  9.     g();
  10.   }
  11. }
复制代码
输出如下:

java.lang.RuntimeException: From f()
at NeverCaught.f(NeverCaught.java:9)
at NeverCaught.g(NeverCaught.java:12)
at NeverCaught.main(NeverCaught.java:15)

所以答案就是:假若一个RuntimeException获得到达main()的所有途径,同时不被捕获,那么当程序退出时,会为那个违例调用printStackTrace()。
注意也许能在自己的代码中仅忽略RuntimeException,因为编译器已正确实行了其他所有控制。因为RuntimeException在此时代表一个编程错误:
(1) 一个我们不能捕获的错误(例如,由客户程序员接收传递给自己方法的一个空句柄)。
(2) 作为一名程序员,一个应在自己的代码中检查的错误(如ArrayIndexOutOfBoundException,此时应注意数组的大小)。
可以看出,最好的做法是在这种情况下违例,因为它们有助于程序的调试。

RuntimeException(或者从它继承的任何东西)属于一种特殊情况,因为编译器不要求为这些类型指定违例规范。

[以上内容参考《Java编程思想》一书],希望对楼主有所帮助。

评分

参与人数 1技术分 +1 收起 理由
曹睿翔 + 1 自己能去看书很好

查看全部评分

回复 使用道具 举报
运行异常可以不处理是不对。只要是异常就要处理。你不处理程序会不按你的设计走。
回复 使用道具 举报
楼主你好,如果问题以解决,请修改分类,谢谢合作。

尽量把问题全面一点提出来,如果不知道怎么提请看我的个性签名,点击红色的字体
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马