1指定某个异常进行特殊处理
正常的快捷键生成的异常为
try {
}
} catch (SQLException throwables) {
throwables.printStackTrace();
} finally {
}
getMessage()
我们可以通过getMessage():获取到异常的信息
比如操作数据库的异常,当我们设置了code变量在数据库中不能重复时,当存入的值重复了,就会显示:
throwables.printStackTrace();显示:
java.sql.SQLIntegrityConstraintViolationException: Duplicate entry '666666' for key 'express.code'
at com.kaikeba.dao.imp.ExpressDaoMysql.insert(ExpressDaoMysql.java:342)
at com.kaikeba.dao.imp.ExpressDaoMysqlTest.insert(ExpressDaoMysqlTest.java:42)
-----------------------------------------------------------------------------------
throwables.getMessage();显示:
Duplicate entry '666666' for key 'express.code'
这样我们就可以在catch块中,进行if/else的判断操作
if (throwables.getMessage().endsWith("for key 'express.code'")){
//如果异常是以for key 'express.code'结束的,则需要我们进行特殊处理
}else {
//其他异常我们打印出来
System.out.println(throwables.getMessage());
}
这个时候,我们可以创建一个继承Exception的类,里面写两个构造方法
public class DuplicateCodeException extends Exception{
//无参的构造方法
public DuplicateCodeException() {
}
//一参的构造方法
public DuplicateCodeException(String message) {
super(message);
}
}
这个时候之前的if/else中,就可以去创建刚刚写的处理异常的类,并且把.getMessage()当作参数,放进这个方法中,把它抛出去
这样未来调取这个方法,获取到取件码重复异常的时候,就会被duplicateCodeException捕获,其他的异常则不会被捕获
public void insert() {
BaseExpressDao dao = new ExpressDaoMysql();
Express e = new Express("123123132","李四","1384388888","顺丰","18888800000","666666");
boolean insert = false;
try {
insert = dao.insert(e);
} catch (DuplicateCodeException duplicateCodeException) {
System.out.println("取件码重复的异常被捕获到了");
}
System.out.println(insert);
}