黑马程序员:java基础知识(三)

时间:2021-07-31 12:55:45

---------------------- ASP.Net+Unity开发 .Net培训、期待与您交流! ----------------------

六、异常
    1、所谓异常,就是程序在运行时出现的不正常情况。java中的异常,是通过java类的形式对不正常的情况进行描述,并封装成对象。在程序运行时,往往会出现一些问题,我们分为两个类型,一个是严重问题(Error),一个是非严重问题(Exception)。对于Error,我们是不允许存在的,在运行时,如果出现Error,就说明程序有错误。而Exception,有时候是不能避免的,比如,做除算时,分母为零的情况。这时候我们就会使用针对性的处理方式来处理异常。Error类和Exception类,都是Throwable类的子类。
    2、异常的处理:try...catch...finally...
    3、自定义异常:
    在实际项目中,往往会出现一些特有的问题,而这些问题并没有被java中所描述。所以对于这些问题,可以按照java对问题的封装的思想,将这些特有的问题自定义为异常,封装起来。例如,在某些计算中,不能有负数的运算。
        class FushuException extends Exception
        {
            ......
        }
    4、RuntimeException:运行时异常
    所谓运行时异常,就是说,程序中如果存在这个异常,而且没有对其进行处理,在编译时是没有问题的,在运行时,会被检测出,而且一旦出现这个异常,程序就会终止。
    5、异常处理中的finally
    finally的代码是一定会被执行的,不管是否出现异常。finally与外部代码的区别:
    (1)①②两处代码都能执行到:
        ......
        {
            try{
                可能出现异常的代码
            }catch(异常 e){
                异常处理
            }finally{
                System.out.println("finally");// ① finally中的代码
            }
            System.out.println("out code");// ② 外部中的代码
        }
    (2)①处finally的代码执行到,②处的外部代码执行不到:
        ......
        {
            try{
                可能出现异常的代码
            }catch(异常 e){
                异常处理
                return;  //异常处理结束后return
            }finally{
                System.out.println("finally");// ① finally中的代码
            }
            System.out.println("out code");// ② 外部中的代码
        }
    (3)①②两处代码都执行不到:
        ......
        {
            try{
                可能出现异常的代码
            }catch(异常 e){
                异常处理
                System.exit(0);  
            }finally{
                System.out.println("finally");// ① finally中的代码
            }
            System.out.println("out code");// ② 外部中的代码
        }
    由上面三个例子可以看出区别,值得注意的是,当在进入finally代码块之前,如果执行了“System.exit(0)”时,finally中的代码也不会被执行。
    6、异常在子类和父类覆盖中的体现
    (1)子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者该异常的子类;
    (2)如果子类中出现了父类中没有的异常,那么这个异常必须在内部处理,不能抛出;
    (3)如果父类方法抛出多个异常,那么子类在覆盖方法时,只能抛出父类异常的子集;
    (4)如果父类或者接口的方法中没有异常抛出,那么子类在覆盖父类时,也不能抛出异常,如果子类中确实出现了异常,那就必须在内部处理,不能抛出。
    7、异常的处理原则:
    (1)处理方式有两种:throws(抛出) 或 try..
    (2)调用到抛出异常的功能时,抛出几个就处理几个,一个try对应多个catch
    (3)多个catch出现时,要把异常最上级的父类放到最后面。
    (4)catch内,需要定义针对性的处理方式。当捕获到异常,但是在当前功能中不能对其进行处理时,可以继续抛出。如:
        try{
            throw new Exception();
        }catch(Exception e){
            throw e;
        }

---------------------- ASP.Net+Unity开发 .Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net