a. 异常是程序运行过程中出现的错误;
b. 异常既可以代表一种错误,又可以代表一个消息;
c. Java的异常处理框架,是Java语言健壮性的一个体现
d. Java把异常当作对象来处理,并给出一个基类java.lang.Throwable作为所有异常的超类
e. 异常是程序中的一些错误,但并不是所有错误都可以避免的
异常发生的原因
a. 用户输入了非法数据
b. 要打开的文件不存在
c. 网络通信时连接中断,或者JVM内存溢出
异常的分类
a. 检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在的文件时,一个异常就发生了,这些异常在编译时不能被简单的忽略
b. 运行时异常:运行时异常使可能被程序员忽略的异常,与检查性异常相反,运行时异常可以被编译时忽略
c. 错误:错误不是异常,而是脱离程序员控制的问题,错误在代码中通常被忽略,例如,当栈溢出时,一个错误就发生了,他们在编译也检查不到
d. Java中所有异常的分类,可分为可查异常和不可查异常:
i. 可查异常:编译器要求必须处理的异常,正确的程序在运行过程中,经常容易出现可预期的异常情况,一旦发生此类异常,就必须以某种方式进行处理。
ii. 不可查异常:编译器不会进行检查,并且不要求必须处理的异常,也就是说程序中出现此类异常时,即使我们没有捕获它,也没有使用Throw抛出它,编译也会正常通过,该类异常包括运行时异常和错误
异常的层次类
a. Throwable
i. Exception
1) 编译时异常
2) 运行时异常
ii. Error
异常处理流程(抛出异常和捕获异常)
a. 捕获异常:
i. 一旦方法抛出异常,系统自动根据该异常对象寻找合适的异常处理器(ExceptionHandler)来处理该异常。所谓何事的异常处理器指的是异常对象类型和异常处理器类型一致。
b. 抛出异常:当一个方法出现错误而引发异常时,该方法会将异常类型和异常出现时程序的状态信息封装成异常对象,并交给本应用,运行时,该应用将处理异常的代码并执行。任何代码都可以通过throw关键词抛出异常,比如Java源代码抛出异常,自己编写的代码抛出异常
异常的处理方式
a. 运行异常将由系统自动抛出,应用本身可以选择处理或者忽略该异常
b. 对于方法中产生的Error,该异常一旦发生JVM将自动处理该异常,因此Java应用不抛出此类异常
c. 对于所有可查异常,必须进行捕获或者抛出该方法之外交给上层处理。也就是一个方法存在异常时,要么使用try-catch捕获,要么使用throw抛出,交给调用该方法的上层调用者处理
异常处理时的代码流程
a. Try-catch-finally
i. try没有捕获异常时,try代码块中的语句依次执行,跳过catch块;如果存在finally块,则执行finally代码块,否则执行后续代码
ii. try捕获到异常时,如果没有与之匹配的catch子句,则该异常交给JVM处理,如果存在finally,则其中的代码仍然被执行,但是finally之后的代码不会被执行
iii. try捕获到异常时,如果存在与之匹配的catch子句,则跳到该catch代码块执行处理,如果存在finally,则执行finally中的代码,执行完finally的代码之后的代码继续执行之后的代码,否则直接执行后续代码,另外注意,try代码块中出现异常处之后的代码不会被执行
b. Try-catch:同上,只是少了个finally代码块
概念 a. 异常是程序运行过程中出现的错误; b. 异常既可以代表一种错误,又可以代表一个消息; c. Java的异常处理框架,是Java语言健壮性的一个体现 d. Java把异常当作对象来处理,并给出一个基类java.lang.Throwable作为所有异常的超类 e. 异常是程序中的一些错误,但并不是所有错误都可以避免的异常发生的原因 a. 用户输入了非法数据 b. 要打开的...