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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范泰洋 高级黑马   /  2012-10-14 01:21  /  1374 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

三、异常
1、概述
        程序有可能出现问题,我们把出现的问题就称为异常.
2、主函数处理异常的方式
        A:主函数手动处理方式的方式.(异常处理机制)
        B:采用的是jvm的默认处理机制.
                把异常的信息打印输出到控制台.
3、异常的体系结构
        A:Throwable 异常的超类
        **Error
                我们不可解决的问题。面对此种问题,我们无能为力。
                比如说:类不存在或者内存溢出。
        **Exception
        在运行时运行出现的一些不正常的状况,这个状况我们通过修改代码,是可以解决的。
                举例:骑自行车回家。
                        走不好的路,车爆胎,是异常。
                        发洪水,路给冲断了,是错误。
                    2003年,非典。这个东西来了,是错误。
                        头疼,感冒了。是异常。
        B:通过分析,发现我们要学习异常。
4、异常的处理方式
        A:try...catch...finally
                **基本格式
                        try{
                                //有可能出现异常的代码
                        }catch(异常类 名字){
                                //处理异常的代码
                        }finally{
                                //一定会被执行的代码,如释放资源
                        }
        **变形格式
                        try...catch
                        try...catch...catch...catch...
                        try...finally
                        try...catch...finally
                        try...catch...catch...finally
                **finally的特点
                        它永远都会被执行.
                        有一个特殊情况:如果在代码中jvm退出系统而来,那么finally就不会被执行.
                **面试题
                        ***final,finally,finalize区别?
        final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。 内部类要访问局部变量,局部变量必须定义成final类型,例如,一段代码……
                                 finally是异常处理语句结构的一部分,表示总是执行。
        finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。JVM不保证此方法总被调用
                        ***
                        try{
                                System.out.println("aaa");
                                System.out.println(10/0);//ArithmeticException
                        }catch(Exception e){
                                System.out.println("bbb");
                                return;
                        }finally{
                                System.out.println("ccc");
                        }       
                请问这个程序运行结果?
                        aaa
                        bbb
                        ccc
        B:throws,throw 抛出
                区别:------一旦执行throw语句,就结束功能!
                        **使用位置
                                throws在方法的声明上使用
                                throw在方法体内使用
                        **使用格式
                                throws后面跟的使用异常的类名
                                throw后面跟的是对象.格式:throw new 异常类名(参数);
                        **联系
                                有throws不一定有throw
                                有throw一定有throws
        C:两种处理方式用哪种呢?<何时使用try,何时使用throw呢?>
                **自己能够处理的就自己处理.
                **自己实在处理不了的交个调用者.
5、Exception的分类
        A:Exception
                这种类型的异常,如果抛出,在编译的时候就会检查.此类异常需要编写针对性的处                理代码进行处理。
        B:RuntimeException
                这种类型的异常,如果抛出,在编译的时候不检查,运行的时候直接处理.
                这种异常必须通过修改代码才能解决.所以,一般针对这种异常,我们不处理,jvm处        理。
6、自定义异常
        除数不能为负数.
                1:继承自Exception或者RuntimeException.必须的!
                2:在自定义异常里面,提供一个带参构造
                class MyException extends Exception{
        MyException(){}
                        MyExcepiton(String message){
                                super(message);
                        }
        }
        class Demo{
        int div(int a,int b)throws RuntimeException{
        if(b<0){
        throw new MyException("除数不能为负数!");
        }
        }
        }
7、异常使用细节
        A:我们为什么要使用try…catch语句进行异常处理呢?只有在某个功能上可能出现某种隐患,并且在该功能的声明上进行了描述时,我们才能够使用此种针对性的处理方式。
        B:如果一个功能抛出多个异常,那么在调用该功能时,需要有多个catch进行每一个异常的针对性处理,如果多个catch中有父类异常,一定要定义在最下面,否则编译失败。
        C:函数内抛出异常,函数上一定要使用thows进行标识,调用者如果调用了该函数,就需要对其进行处理(try或者抛出),否则编译失败。

评分

参与人数 2技术分 +4 收起 理由
吴培丽老师 + 3
韩军博 + 1 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马