day8-18(异常)

一.异常定义

用一个类来描述在代码编译或者运行期间可能遇到的各种错误.
Throwable:所有异常或错误的父类
    **Exception**:异常
        1.在编写代码期间:由编译器提出,被称之为受查异常
        2.在运行代码期间:编译器无法检查的,被称之为非受查异常.也称为运行时异常.不是所有的运行时异常都需要被处理
    常见面试题:说出5种常见异常,以及原因和解决办法,如何回避?
    答:  
    **Error**:错误,通常是jvm抛出的,一般情况不需要处理Error

二.异常应用

throw: 抛出一个异常.
throws:声明此处可能会产生某种异常.(有可能会,不一定会.)
public class Demo {//throws Exception{类不能抛出任何异常

    public static void main(String[] args) {
        method();
    }

    /**
     * throws只能用子啊方法声明处,用于声明此方法可能会产生某种异常
     * throw   用在方法的真实的抛出一个异常对象
     * @throws NullPointerException
     */
    private static void method() throws NullPointerException{//throws
        throw new NullPointerException("空指针异常");
    }
}
try-catch-finally:
     final,finally,finalize,说出三者区别
     1.final 表示最终,可以修饰
         1.1类(内部类可以,接口不可以)
            不可以被继承
         1.2方法不可以被重写
             重写:存在继承关系中,子类更改父类的实现方式.改的是方法体.一个行为不同实现
             重载:同一个类中,方法名相同,参数列表不同.不同特征不同的实现

         1.3变量
             引用:对象不能变
             基本:值不能变
    2.finally:
        异常模块的最后一个模块,位于额外缓冲区,通常这里进行释放资源关闭资源
        比如流 各种close
    3.finalize
        和GC有关(垃圾回器),不受人为调用,gc所处的线程是低级线程
public class Demo {//throws Exception{类不能抛出任何异常

    public static void main(String[] args) {
        //--try-catch 是异常处理语句块.
        //try 中是可能产生异常的代码
        //catch是对上面可能产生的异常进行捕捉,不产生则不执行catch
        try {//try中如果有多条语句,其中任意一条语句产生异常.后续语句是不会执行的,直接catch捕获
            System.out.println(1);
            method();
            System.out.println(2);
        }catch (NullPointerException e){
            e.printStackTrace();
            return;
        }catch (Exception e){
            e.printStackTrace();
        }finally{//异常捕捉的最后一个结构,代表最终还是会执行,用于关闭和释放各种资源,比如流,对象
            /**
             * 思考:finally一定会执行,如果在catch中存在return是什么情况
             *      finally中有return会有什么执行情况
             *
             * 类似:如果一个方法有返回值,在方法的内部声明一个局部变量,在方法结束时把该变量返回.问题是:局部变量应该保存在栈中
             * 当方法结束,方法栈要释放该方法锁占用的栈资源.那么局部变量保持在哪里,锁返回的值是哪里来.
             */

        }
    }

    /**
     * throws只能用子啊方法声明处,用于声明此方法可能会产生某种异常
     * throw   用在方法的真实的抛出一个异常对象
     * @throws NullPointerException
     */
    private static void method() throws NullPointerException{//throws
        throw new NullPointerException();
    }
}

三.异常处理原则

1、 能处理就早处理,抛出不去还不能处理的就想法消化掉或者转换为RuntimeException处理。
因为对于一个应用系统来说,抛出大量异常是有问题的,应该从程序开发角度尽可能的控制异常发生的可能。
2、 对于检查异常,如果不能行之有效的处理,还不如转换为RuntimeException抛出。
这样也让上层的代码有选择的余地――可处理也可不处理。
3、 对于一个应用系统来说,应该有自己的一套异常处理框架,这样当异常发生时,也能得到统一的处理风格,
将优雅的异常信息反馈给用户。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值