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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 于星星 中级黑马   /  2012-7-17 10:19  /  1836 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

每次在写到处理异常的时候 就不知道该怎么处理了,是抛出去,还是抓住,就是抓住了,在catch中又如何处理,还是转为RuntimeException异常,求高手详解。

7 个回复

倒序浏览
Throwable 是所有 Java 程序中错误处理的父类 ,有两种: Error 和 Exception 。Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。
Exception :表示可恢复的例外,这是可捕捉到的。runtime exception 和 checked exception 。 checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。
runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机负责。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。
      至于catch中如何处理,这个问题太泛泛了,具体问题具体分析啊,不同的异常,其处理方式也会不一样。
      Java异常处理的目的是提高程序的健壮性,你可以在catch和finally代码块中给程序一个修正机会,使得程序不因异常而终止或者流程发生以外的改变。同时,通过获取Java异常信息,也为程序的开发维护提供了方便。
回复 使用道具 举报
异常处理格式:try {需要被检测的代码}
                     catch (异常类  常量) {处理语句}
                     finally {一定会执行的语句}
这只是一种格式
异常有两种:
1、编译时被检测异常
  该异常在编译时,如果没有处理(没有抛也没有try),编译失败。
  该异常被标识,代表这可以被处理。
2、运行时异常(编译时不检测)
  在编译时,不需要处理,编译器不检查。
  该异常的发生,建议不处理,让程序停止。需要对代码进行修正。

运行异常常在子类覆盖父类中体现,其处理方式如下:
1,子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类。
2,如果父类方法抛出多个异常,那么子类在覆盖该方法时,只能抛出父类异常的子集。
3,如果父类或者接口的方法中没有异常抛出,那么子类在覆盖方法时,也不可以抛出异常。如果子类方法发生了异常,就必须要进行try处理,绝对不能抛。

评分

参与人数 1技术分 +1 收起 理由
韦念欣 + 1 赞一个!

查看全部评分

回复 使用道具 举报
具体情况具体对待,
有时候你覆写父类的方法,而你父类的方法又没有抛异常,此时就需要你自己在catch中处理了

如果代码中上面的地方出现问题会影响到下面的代码运行,此时就要抛RuntimeException,自己不能处理,处理了下面的代码在运行时就不知道哪里有问题,你后期想找出这个错误的话很难

你要是老师就可以抛,讲课嘛  方便
要不是的话  呵呵,那就都得处理
回复 使用道具 举报
谢谢各位
回复 使用道具 举报
如果一个函数可能会有问题,就需要在函数上用throws来声明下会抛异常.
Java中的异常,可以自动抛出,可以用throws关键字手动抛出.
但自定义的异常,需要用throw关键字手动抛出.

throw and throws的区别是:
throw 只能写在函数内,抛出的是异常对象,调用这个这个函数的时候在收到异常对象后,有两种处理方式,一是用try{}catch()处理,或者继续在函数上throws抛给下一个调用的对象.
throws只能写在函数上,抛出的是异常类
Runtimeexception是一个特殊的Exception的子类.它在函数内抛出的异常不需要声明.
回复 使用道具 举报
在软件开发中,异常还是有必要处理的。你要把自己觉得会出现问题的代码,在编译阶段解决不了。那就得告诉你后来的操作者会出现的问题!

回复 使用道具 举报
王达 初级黑马 2012-7-17 11:24:38
8#
有的异常时不能抛的,比如你在多线程的时候继承Runnable接口的类就不能抛异常,因为它继承的接口是没有异常抛出的,子类只能抛出父类的异常或其异常的子类;在catch的时候你可以标注一下错误的内容,在程序有异常发生的时候就可以比较方便的找到那里出了异常了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马