异常:
结构:
Throwable
- Error
- Exception
异常的分类:
可检测异常
非检测异常:
RuntimeException
异常的处理:
抛出异常:
throws:用在方法声明的位置,跟的是异常类型
throw:用在方法体中的,跟的是异常对象
子类重写父类的方法,如果父类的方法中抛出异常:
子类重写时,注意:
- 可以不抛异常
- 可以抛出父类中异常的一部分
- 可以抛出父类异常的子类异常
- 不可以抛出父类异常的父类类型
- 不可以抛出父类中没有的异常
捕获异常 :
try{}catch(){}
catch可以出现多次
如果多个catch中的异常类型存在父子关系,一定是子类异常在前,父类异常在后
finally块:
特点:不论是否发生异常,finally中的代码块都会执行
通常用于释放资源
final,finally,finalize的区分
final:一个修饰符,可以用来修饰变量,方法,类
finally:和try..catch配合使用的,通常是用于释放资源
finalize():是GC回收时会调用的一个方法
是Object类中的一个方法,通常会被子类重写,
calss Person{
public void finalize(){
//在对象被回收之前,调用此方法,此方法通常用于在对象回收前做最后的资源释放操作
}
}
自定义异常:运行时异常
自己根据业务写异常类
实现:
- 定义类UserNotFoundException extends Exception/RuntimeException
- 在自定义类中写出构造方法
案例:
用户找不到异常在登录模块中的一个应用
public class UserNotFoundException extends RuntimeException {
private static final long serialVersionUID = 4071329175600254484L;
public UserNotFoundException() {
super();
// TODO Auto-generated constructor stub
}
public UserNotFoundException(String message, Throwable cause, boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
// TODO Auto-generated constructor stub
}
public UserNotFoundException(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public UserNotFoundException(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public UserNotFoundException(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}
public class LoginController {
public static void main(String[] args) {
LoginService loginService = new LoginService();
try{
loginService.findUser("aa", "123445");
}catch(UserNotFoundException e){
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
/*
* 业务处理
*/
public class LoginService {
public void findUser(String name,String pwd){
//调用findUser()
LoginDao dao = new LoginDao();
User user = dao.findUser(name, pwd);
//根据user的值做出相应的业务判断
if(user==null){
throw new UserNotFoundException("用户不存在!");
}
}
}
public class LoginDao {
public User findUser(String username,String pwd){
/*
* 根据前台页面用户传来的用户名和密码去数据库
* 查询此用户是否存在,如果不存在,抛出用户找不到
* 异常
*/
//根据用户传来的信息去数据库查询,
//如果查到用户,那么将用户的所有信息返回保存到user对象中
//如果查询不到,说明用户不存在,那么user为null
User user = null;
return user;
}
}