Object类的equals方法
boolean equals(Object obj)
** 所有类都是Object的子类,Obj的equals方法比较的是地址,
我们使用需要比较值需要重写equals方法,数组/集合/String已经重写好,我们写类可以自动生成equals方法(重写后)
异常(程序编译器或运行期出现的问题就是异常)
- 异常继承体系
Throwable
--Error:错误
--Exception:异常
-- 编译时异常
-- 运行时异常
继承体系图如下
- 异常的分类
-- 编译时异常
-- 运行时异常
异常和错误的区别
java.lang.ArithmeticException:数学运算异常
java.lang.OutOfMemoryError:内存溢出错误
- 如何判断程序出现的问题是异常还是错误?
* 根据控制台输出的异常类名判断
* 如果类名是以Exception结尾,则是异常。
* 如果类名是以Error结尾,则是错误
- 异常和错误的区别
异常:可以对异常进行处理,如果不处理程序直接奔溃。
错误:一般是系统产生的,无法针对错误进行处理,一旦出现错误,只能修改代码,否则程序无法继续运行。
处理方式
JVM默认处理:
--将异常信息输入到控制台
--结束程序运行
手动处理:
--1.捕获异常
单catch处理
-- try {
// 可能出现异常的代码
} catch(异常类名 变量名){
// 处理异常的代码
}
单catch处理格式说明:
* try代码块
用来存放可能出现异常的代码。
* catch代码块
用来存放处理异常的代码。
多catch处理格式说明:
--try代码块
用来存放可能出现异常的代码。
* catch代码块
用来存放处理异常的代码。
注意事项:
* try里面的代码一旦出现异常,后续的代码就不会执行,直接匹配catch代码块。匹配成功执行对应代码块的代码。
多个catch中使用异常类是有顺序要求
平级关系:没有继承关系异常类,没有先后顺序要求。
上下关系:有继承关系的异常类,越高级的父类要在越下面
--2.抛出异常
throw和throws关键字概述
throw关键字的作用:将异常对象抛出,抛给方法调用者,并结束当前方法的运行。
throws关键字的作用:用来标识当前方法可能出现的异常类型,告诉调用者该方法可能出现异常类型。
throw关键字使用格式
* throw new 异常类名("异常信息");
throws关键字使用格式
* 修饰符 返回值类型 方法名(参数列表) throws 异常类名1,异常类名2...{
}
throw关键字使用位置:使用在方法体中。
throws关键字使用位置:使用在方法声明上。
**子类重写方法时方法声明不能声明比父类大的异常
finally代码块
finally代码块的特点
* 只要进入的try,不管try代码块中的代码是否出现异常都会执行该代码块中的代码。
finally的作用
* 主要是用来释放资源。比如,关闭IO流,关闭数据库资源。
运行时异常和编译时异常
运行时异常的概念
RuntimeException及其子类的异常都是运行时异常。
编译时异常的概念
除了运行时异常以外的所有异常都是编译时异常。
运行时异常的特点
* 方法声明上声明的异常是运行时异常时,则方法调用者可以处理,也可以不处理。
* 方法体中抛出的异常是运行时异常,则方法声明上可以声明,也可以不声明。
编译时异常的特点
* 方法声明上声明的异常是编译时异常时,则要求方法调用者一定要处理。
* 方法体中抛出的异常是编译时异常且没有捕获处理,则要求方法声明一定要声明该异常。
自定义异常
自定义异常步骤
命名规范:XxxxException
继承异常类:
Exception:编译时异常(要求调用者一定要处理的异常)
RuntimeException:运行时异常(不要求调用者一定要处理的异常)
构造方法:
有参数构造
无参数构
案例:Person类,有age成员变量,如果赋值age的值为负数,则抛出一个自定义异常对象:NoAgeException
***是直接跟用户打交道的,则千万不要抛出处理,要捕获处理。