黑马程序员技术交流社区

标题: java异常的作用 [打印本页]

作者: 壁虎    时间: 2013-3-23 16:25
标题: java异常的作用
本帖最后由 tuo1254 于 2013-3-24 08:08 编辑

对异常,我一直不是特别理解,写程序时,我catch里面,不是打印此异常的信息,就是向外抛一个异常的对象。
最后的目的都是获取程序运行时发生异常的信息。然后根据提供给我的信息,去修正代码。我对异常的理解就是:
发现错误的理想时期是在编译阶段,也就是你在试图运行程序之前,然而编译期间并不能找出所有的错误,所以我们就需要用异常机制将错误源的适当信息传递给某个接收者
请问java的异常机制就只有这么一个作用吗?

作者: 张海洋    时间: 2013-3-23 16:38
   这是我整理的笔记,希望有帮助!

异常就是程序中存在的问题

        在java中程序出问题有两种情况下

        Exception------->解决  
       
        Error----------->不能解决  

        Throwable 这是Exception与Error的父类

        Throwable
                |-----Exception
                |-----Error

        命名规范
                所有异常都是使用Exception做为后缀
                所有的错误都是使用Error做为后缀.

        为什么使用异常

                对一些情况我们可以使用if条件语句进行判断解决
                存在的隐患,为什么还要使用异常?

                1.我们使用异常,可以将我们程序中的逻辑代码与异常问题分离。
                  而使用if判断操作,是将逻辑代码与判断操作混到一起,
                  它会使用程序不清晰。
               
                2.当我们完成某个操作时,这个操作是否执行成功了,我们需要根据执行成功与否
                  进行其它操作,但是这个方法它不能进行返回操作,那么这个时候就可以使用
                  异常进行处理。
       
        Exception的处理方式  1.捕获  2.抛出
       
        捕获
               
                格式
                        try{
                                可能出现异常的代码块
                        }catch(异常类型 变量){
                                对异常进行处理.
                        }finally{
                                完成关闭动作(关闭资源)
                        }

                 如果出现异常,那么异常后面的代码不会被执行。

        关于异常中常用的方法.
                getMessage()
                获取异常信息,返回字符串。
                toString()
                获取异常类名和异常信息,返回字符串。
                printStackTrace()
                获取异常类名和异常信息,以及异常出现在程序中的位置。返回值void。
       
        异常处理 抛出

                throws 异常类型1,异常类型2,...
                写在方法上.

                抛出是抛给了调用者,如果调用者也没有处理,继续抛出,那么最终就会
                抛出给jvm。

        什么时候使用捕获,什么时候使用抛出?
                 如果当前问题在方法内可以自己解决,那么我们就进行捕获。
                 如果解决不了,那么抛出给调用 者,让调用者解决。
       
        异常分类
               
                异常分为两种

                        1.编译异常
                                当我们对java文件进行编译时,就要求我们对产生的异常进行处理,
                                这种异常就是编译异常。

                                Exception类以及除了RuntimeException体系中的其它类都是编译异常。

                        2.运行异常
                                我们可以不用对其进行处理,如果出现问题,jvm会处理.

                                RuntimeException以及其子类都是运行异常



                        无论是编译异常还是运行异常,我们都可以人为的对其进行处理。
       
        自定义异常
               
                简单说就是自己做一个类去继承异常类。这就是自定义异常。

                为什么要使用自定义异常?

                        在实际操作中,有些问题,不能使用jdk中提供的异常进行描述,
                        这个时候我们就可以自已定义异常来对其进行描述。

                我们在使用自定义异常时会使用一个关键字  throw

                throw作用是抛出异常对象。


作者: 刘凯    时间: 2013-3-23 16:46
我的理解是
实际的开发中,异常不是说每次运行的时候都会出现,在程序员编写代码的时候,很可能有些问题考虑的不是很周到,后者说,感觉某种异常的情况出现的概率不是很大,所以为了程序的简洁,一些小概率的事件不去做处理,或者是疏忽了一些事件,而之一段代码可能在这个小概率的事件下发生异常,所以我们用catch的方法将异常捕捉下来,然后自定义这个异常出现的动作,比如将异常出现的位置,时间,等写到一个异常日志里,以便于程序员查看这些异常日志,如果发现这个异常出现概率比较高  那么就去考虑程序的优化,更新代码来处理这个事件,我感觉 我们平时用的一些软件不断升级来修补BUG 就是在对程序不断优化 ,
当然 这个异常机制还可以用到很多别的方面,比如这个异常出现了,是重新启动程序,还是直接关闭,还是弹出对话框提示用户 等等 。。




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