1. 异常机制
(1) 异常概念及常见异常
① 什么是(现实生活中的)异常?
强强:正常上学路上,突然遇到钢管:亲密的接触:耽误上学
②什么是Java中的异常
代码正常运行不会出问题,但是遇到意外,参数变量,不符合要求,发生意外,代码终止运行
代码中的异常处理好了,代码就可以顺利的继续运行!
(2) 异常的体系结构
异常都有继承结构分
(3)异常的处理方式
① 自己捕获处理
自己处理,对可能发生异常的代码做处理:
try{
//可能发生异常的代码块
}catch(发生异常的类型 形式参数){
//在发生异常之后做相应的处理
}catch(发生异常的类型形式参数){
}catch(发生异常的类型 形式参数){
}catch(发生异常的类型 形式参数){
}finally{
//一场代码块,执行完成之后,这个位置一定会执行的
//一般在这里释放锁,或者关闭流资源
}
执行流程:进入try语句块----
正常运行:finally
发生异常:进入对应异常类型的catch语句块
② 自己不处理,抛出给别人
a. 抛出异常 :自己不处理:抛出:给别人处理
b. 如果直接抛出异常,发生异常之后的代码是不会运行的
c. 什么时候可以抛出异常: 除非你发生异常之后的代码,不需要运行的,可以选择抛出
d.抛出捕获一样的特点: 还是可以抛出父类类型
e.可以抛出多个异常的
(4) 获得异常信息
①(捕获的异常类型 e)捕获的异常实际捕获一个异常对象,该对象e可以在catch语句块直接使用
②System.out.println(e);//①直接打印异常对象:发现父类toString覆写了
③ System.out.println(e.getMessage());//②异常对象调用方法获取异常信息
④ e.printStackTrace();//③【异常对象调用方法,方法内部打印信息】最常用方式用异常对象去获得异常信息
(5) finally语句块
finally语句块
try{
}catch(){
}fianlly{
一定会执行的语句块【前提是没有关闭虚拟机】:释放锁,关闭流资源
}
finally:特点:return特点别讲解
只要执行了,return结束方法【finally 结构结束无效:缓存:暂时存着,真的结束才给出去】
(6) throw主动抛出异常
异常情况很多,Java不可能写完所有的异常类型,自己写异常类型,表达你业务中的异常类型
public static void main(String[] args) {
UserName("李四");
}
static String[] name ={"王二","张三"};//创建一个String类型的数组,作为数据库,并赋值
public static void UserName(String username){//设计一个方法,如果输入的用户名是数据库里有的,就自己抛出错误,如果没有就提示注册成功
for (String a: name) {//遍历数据库中的值,
if(username.equals(a)){//判断,如果的值如果和数据库中搞得值一样,则自己抛出错误
throw new NullPointerException("用户名已存在");//抛出错误
}
}
System.out.println("注册成功");
}
(7) 自定义异常
① 为什么需要自定义异常:
自定义异常类型,满足自己不同业务的:异常类型,描述的需求
public class UserAccountExit extends RuntimeException{
// 设计一个类,自定义错误类型,继承父类RuntimeException
UserAccountExit(String b){//创建一个构造方法
super();//信息,被传入到了父类的字段,并且父类已经覆写了toString
}