1.常见异常
1 下标越界(数组)
2 空指针异常(数组,面向对象)
3 栈内存移出(递归)
4 类型转换异常(面向对象)
5 数字格式化异常(常用API)
2.概述
异常 :
是java提供的识别错误的响应机制,可以使程序更加健壮 易于调试
异常是错误的另外一种说法
java中 有个专门模拟所有异常的类,Throwable,是异常类的祖类,所有的异常类 都是它的子类
如果程序 出现了异常,会终止程序生命周期执行,所以需要进行处理,
异常处理形式
try…catch… : 解决异常,一般用在客户端(调用处)
throws : 抛异常,一般用在类库端(服务端,被调用的地方)
throw : 异常源,制作异常,创建异常对象
3.继承体系
4.Error
4.1概念
系统内部错误,这类错误由系统进行处理,程序本身无需捕获处理
比如:OOM(内存溢出错误)、VirtualMachineError(虚拟机错误)、StackOverflowErrar(堆栈溢出错误)等,一般发生这种情况,JVM会选择终止程序。
5.Exception
5.1 概述
Exception是所有异常类的父类。分为非RuntimeException和RuntimeException 。
非RuntimeException
指程序编译时需要捕获或处理的异常,如IOException、自定义异常等。属于checked异常。
RuntimeException
指程序编译时不需要捕获或处理的异常,如:NullPointerException等。属于unchecked异常。一般是由程序员粗心导致的。如空指针异常、数组越界、类型转换异常等。
5.2 常用方法
5.3 Try…catch…
## 第一种 单异常
try{
高风险代码;
}catch (异常类型 变量){
出错后的操作;
}
## 第二种 多异常
try{
高风险代码
}catch(异常类型 变量){
}catch(异常类型 变量){
}
多个异常类型之间不能有继承关系,有,就必须是从子类到父类,
否则会因为多态的原因把异常对象获取
## 第三种 自动关闭资源
try( 开启资源; ){
高风险代码;
}catch(异常类型 变量){
}
5.4 Throws
throws 把异常抛出,是一种提醒,跟调用处说明,这里可能有异常
可以抛出多个异常,多个之间 逗号隔开
5.5 Finally
finally : 是必须执行的语句
只有一种情况不执行,System.exit(0);
1 finally 不能单独使用 2 必须和try一起 或者 try…catch 一起使用
5.6 不能有更宽泛的异常
针对继承状态下,抛出的异常类,要么和父类抛出的异常类一样,要么就是父类抛出的异常类的子类, 要么 就不抛出异常
5.7 自定义异常
5.7.1 语法
自定义异常类 :
1 继承一个已有的异常类
一般我们继承Exception即可
如果是运行时异常,则继续RuntimeException
2 公共的无参构造
3 有参构造,传入String,是错误信息
public class Test extends Exception {
public Test() {
}
public Test(String msg) {
super(msg);
}
}
5.8 应用场景
需求 :
完成用户登陆
1 用户拥有 username,password,nickname三个属性
2 业务逻辑类,提供登陆方法,校验是否登陆成功,准备用户数组,保存用户信息(相当于是数据库)
3 入参是 用户名和密码 , 出参也是用户对象,登陆成功之后,返回用户的所有信息
4 客户端类,接收用户输入,进行登陆校验