黑马程序员技术交流社区

标题: 关于异常处理的几点问题 [打印本页]

作者: 黑马-马磊    时间: 2013-9-28 15:10
标题: 关于异常处理的几点问题
本帖最后由 黑马-马磊 于 2013-9-28 15:18 编辑

如果一个异常的发生处没有捕获和处理该异常,控制将返回到产生该异常的方法的上一级调用方法,因此可以将程序设计为在上级调用方法中捕获和处理异常。上级没有在传递给更上一级。这个过程成为传递异常。这个传递是怎么传递的 throw 还是throws?
没有找到能处理异常的catch代码块,执行当线程的所属的ThreadGroup对象中的uncaughtException方法,将调用转发给默认的未捕获异常处理程序。

搞迷糊了!脑袋一团浆糊!不知道想干嘛了。。。
帮俺分析分析说道说道两者有什么区别吧...








作者: 陈钦涛    时间: 2013-10-2 14:17
第一个段讲的是异常的处理吧,一个方法中出现了异常(非运行时异常),处理方式要么将它try catch处理,要么通过在方法上用throws 关键字加上异常的类名抛出去,如果有哪个方法调用了这个声明异常的方法,它就接收到了异常,也就是文中说传递异常给上一级。throw 用在方法内,用来抛出创建的异常对象,throws用在方法上,用来抛出声明的异常类。
第二段说的是你没有对异常进行抛或者try catch处理就会导致虚拟机启动的异常处理机制,就是当掉。
插一句,这些文字看起来比较艰涩,有的是从英文文档硬生生翻译过来的,如果刚开始学习的话不建议看这些文字,会把你脑袋拧得皱巴巴的。
作者: qq316525598    时间: 2013-10-2 17:58
throws是获取异常
throw是抛出异常
try是将会发生异常的语句括起来,从而进行异常的处理
catch是如果有异常就会执行他里面的语句
在try块中是可以抛出异常
try{
        可能出现的异常语句
}catch(异常类 异常对象){
        异常处理(throw ex)
}
throws是用来声明一个方法可能抛出的所有异常信息
throw则是指抛出的一个具体的异常类型。  比如try{}catch(Exception e){throw ex} 用throw
1、throw代表动作,表示抛出一个异常的动作;throws代表一种状态,代表方法可能有异常抛出
2、throw用在方法实现中,而throws用在方法声明中  (通俗点就是throw 在方法执行里,而throws在方法外面)
3、throw只能用于抛出一种异常,而throws可以抛出多个异常
没有找到能处理异常的catch代码块,执行当线程的所属的ThreadGroup对象中的uncaughtException方法,将调用转发给默认的未捕获异常处理程序。  这段话不知道理解是try catch没有找到可能处理的异常,还是有异常没用try catch  进行抓取
如果是try catch没有找到可能处理的异常  ,那这个就是高难度的问题了,那就是程序处理的逻辑问题了。
如果是异常没用try catch  进行抓取  那得看这个异常的具体情况,比如说使用IO流,你可以用try catch,但直接throws 更加简单而且处理快速,所以可以直接获取就好了,但如果是比如除0异常,必须得try catch进行处理


作者: 云水禅心    时间: 2013-10-2 21:07
异常:是对问题的描述。将问题进行对象的封装。( 通俗的说就是:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述,并封装成对象。其实就是java对不正常情况进行描述后的对象体现。)
异常体系:Throwable
             --Error
             --Exception
                --RuntimeException
异常体系的特点:
        异常体系中的所有类以及建立的对象都局部可跑型
        也就是说可以被throw和throws关键字所操作。
异常有两种:
        编译时被检测异常:该异常在编译时,如果没有处理,编译失败。该异常被标识,代表这可以被处理。
        运行时异常(编译时不检测):在编译时,不需要处理,编译器不检查,该异常的
        发生,建议不处理,让程序停止,需要对代码进行修正。

异常的处理原则:
        1.处理方式有两种:try或者throws
        2.调用到抛出异常的功能时,抛出几个,就处理几个。
                一个try对应多个catch。
        3.多个catch,父类的catch放到最下面。
         4.catch内,需要定义针对性的处理方,不要简单的定义ptintStackTrace输出语句;也不要不写。
                当捕获到的异常,本功能处理不了时,可以继续在catch中抛出
如果该异常处理不了,但并不属于该功能出现的异常,
                可以将异常转换后,在抛出和该功能相关的异常;
                或者异常可以处理,当需要将异常产生的和本功能相关的问题提供出去。
                当调用者知道并处理,也可以将捕获异常处理后,转换新的异常。
                try
                {
                        throw new AEception();
                }
                catch(AException e)
                {
                        throw new BException();
                }
                比如,汇款的例子

异常的注意事项:
        在子类覆盖时:
        1.子类抛出的异常必须是父类的异常的子类或者子集。
        2,如果父类或者接口没有异常抛出时,子类覆盖出现异常,只能try不能抛。

同时学习了异常才会让我们以后在开发的过程中思维更严谨,同步中的单例设计模式



作者: 乔兵    时间: 2013-10-3 19:11
问题解决后,请修改帖子分类为:提问结束
作者: 麦子    时间: 2013-10-3 20:06
异常体系的特点
       就是该体系中德所有类及建立的对象可是具备可抛性的(也即是可以被throw和throws关键字修饰)
throw定义在函数内部,用于抛出异常对象
throws定义在函数上,用于抛出异常
       异常是通过Throws 传递的;
       举个例子:
      public  int number(int number)throws NumberFormatException
      意为:如果数 number 不符合规范,则通过Throws 传递NumberFormatException;




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