170309-Java异常

    xiaoxiao2021-03-25  110

    1625-5 王子昂 总结《2017年3月9日》 【连续第159天总结】

    A. Java 异常、断言、日志和调试

    B. 程序在遇到错误时,应该至少做到以下几点:

    1.向用户报告错误

    2.保存所有的工作结果

    3.允许用户以妥善的形式退出程序

    断言可以用来有选择地启用检测(异常处理的错误捕获)

    异常处理的任务就是将控制权从错误产生的地方转移给能够处理这种情况的错误处理器。

    在Java中,如果某个方法不能够采用正常的途径完成它的任务,那么就会直接抛出一个封装了错误信息的对象然后(不带任何返回值的)结束该方法。并且调用该方法的代码也将无法继续执行,而是转交给错误处理器。

    在Java中,异常对象都是派生于Throwable类的一个实例。

    结构为:Throwable

    Error Exception

    IOException RuntimeException

    Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。这种情况很严重,也很少出现。

    由程序错误导致的异常属于RuntimeException;而程序本身没有问题,但由于像I/O错误这类问题导致的异常属于其他异常

    派生于RuntimeException的异常包含这几种情况:错误的类型转换;数组访问越界;访问空指针

    不派生于RuntimeException的异常有:试图在文件尾部后读取数据;试图打开一个不存在的文件;试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在

    Error类或RuntimeException类的所有异常称为未检查异常;其他(IOException)类的异常称为已检查异常

    编译器将核查是否为所有的已检查异常提供了异常处理器

    在C++中,有两个基本的异常类。logic_error类相当于Java中的RuntimeException类,表示程序中的逻辑错误;runtime_error则表示所有由于不可预测的原因所引发的异常,相当于非RuntimeException类的异常

    方法应在其首部声明所有可能抛出的异常,便于直观看出。

    eg: public FileInputStream(String name) throws FileNotFoundException

    应该只抛出已检查异常。因为未检查异常不是不可避免(Error),就是应该避免发生的(RuntimeException)

    如果在子类中覆盖了超类的方法,那么子类方法的已检查异常不能比超类的方法更加通用,或者干脆不抛出异常。如果超类方法未抛出已检查异常,那么子类的方法也不能抛出异常。

    抛出异常的流程:

    找到一个合适的异常类;创建这个类的一个对象;将对象抛出

    eg: throw new EOFException();

    或者EOFException e = new EOFException();

    throw e;

    如果某个异常发生的没有在任何地方进行捕获,那么程序就会终止执行,并在控制台上打印出异常信息,其中包括异常的类型和堆栈的内容。

    要想捕获一个异常,必须设置try-catch语句块。当在try中的代码抛出在catch子句中说明的异常类时,将会跳过try语句块的其余代码,然后执行catch子句中的处理器代码。

    多个异常既可以通过多个catch子句来捕获,也可以通过一个公共catch子句(类型中间用管道符号|分隔)来捕获

    注意:异常变量隐式定义为final变量,即不可以在catch子句内为异常变量赋值

    C. 明日计划

    Java 异常、断言

    转载请注明原文地址: https://ju.6miu.com/read-16631.html

    最新回复(0)