本章目标:
1、了解什么是异常、了解异常和错误的区别
2、了解异常的分类,对各种各大异常分类有基本认知度,至少能掌握5种常见异常的类名、解决方案
3、掌握异常处理的3种方式,学会在合适的时机使用合适的方式:
1)提前预判,让异常不发生(1、要有良好的对异常的铭感度;2、要有丰富的经验判
断什么地方有可能出现运行异常)
2)异常发生以后,使用异常处理机制当场解决
3)异常发生以后,使用抛出机制交由外部调用者解决
4、了解自定义异常的编写和使用,为第三阶段做准备
异常处理概论:
异常(Exception)是程序在执行过程中所产生的问题。异常指在程序代码中出现的能够用代码去解决的问题叫做异常,不能用代码解决的问题叫错误(Error),错误一般是硬件问题、运行环境问题。
异常分类(两种):报异常时机不同,一个在编译期,一个在运行期
1、编译时异常:检查异常,checked异常
2、运行时异常:不检查异常,unchecked异常
异常根类:Throwable
异常处理机制: ----- try-catch-finally
try{
正常逻辑的代码,但有可能发生异常的
}catch(异常类型 变量名){
异常发生以后的处理代码
}catch(异常类型 变量名){
,,,,,,
}catch(Exception ex){
ex.printStackTrace( );
}finally{
通常书写资yuan的qing理工作
不管是否有break,continue,return,都会先执行finally,ran后再跳出。
}
finally: 不管是否发生异常,都会执行
通常在catch出异常之后,再加一个Exception异常,并通过ex.printStackTrace( );把发生的异常的堆栈信息打印在控制台上,这样开发人员在ce试的时候就可以知道发生了哪些之前没有预见到的异常以及发生在哪儿,运ying时会把这句代码去掉,避免用户受惊,换成使用日志的方式记录异常信息。
当catch块后面出现多个错误是,父类catch写到后面,其他写在前面
throws 关键字:
写在方法声明的最后---表明本方法有可能会抛出某些类型的异常,多个异常类的话中间用
逗号分隔,后面跟的是异常类
强调:它的作用是警告调用者,出了异常你要处理,并不代表一定会出异常
调用抛出异常的方法,调用者会立马报错(其实是强制调用者在编译器就要确定要
处理这些抛出的异常,如果抛出的是运行时异常,则没有受警告的效果)
throw关键字:写在方法体里面的,是一句执行代码,一旦执行到这句代码就一定会发生
异常,如果这个时候发生的是编译时异常,那么要求方法声明要加throws
关键字,如果是运行时异常,则可以直接编译通过不用加throws。throw
后面跟的是异常对象。
用户自定义异常:
从语法上说:如果要写一个自定义异常,只需要继承Exception就可以了
从工程使用中来说:它还应该包含自己特有的方法,比如写日志,同事在分层架构中,不需要没一层的开发人员都去调用写日志的行为,所以需要他们把他们捕获的各种异常转换为自定义异常,ran后往上抛,交由界面层统一处理,所以自定义异常中还应该包括带参构造,调用父类的带参构造,从而实现能够转换的目的。
public class LovoException extends Exception{
public LovoException(){
}
//为了把别人的异常对象的信息装入到LovoException中,所以提供这个构造
//具体的实现只需要调用父类Exception的带参构造即可(JDK先人已经写好)
public LovoException(Exception ex){
super(ex);
}
//为了能够把自定义信息(所谓的业务异常)装入到LovoException中,所以提供的这个构造
//具体的实现直需要调用父类Exception的带参构造即可
public LovoException(String msg){
super(msg);
}
}
日志书写方法:
public void writeLog(){
}