/* 首先定义一个DAO异常,继承自RuntimeException。 继承RuntimeException的原因是可以给业务层自由选择是否处理异常, 且不用在接口中声明抛出异常,避免接口污染。 */ class DAOException extends RuntimeException { //... } //定义DAO接口 interface DAO { void create(PO po); PO research(Object poId); void update(PO po); void delete(PO po); } //实现DAO接口 class DAOImpl implements DAO { void create(PO po) { //... try { //... } catch (SQLException e) { //抛出重新包装的异常 throw new DAOException(e.getMessage, e); } //... } //... }