package com.ibm.dw.sample.exception;
/**
* 自定义 RuntimeException
* 添加错误代码属性
*/
public class RuntimeException extends java.lang.RuntimeException {
//默认错误代码
public static final Integer GENERIC = 1000000;
//错误代码
private Integer errorCode;
public RuntimeException(Integer errorCode, Throwable cause) {
this(errorCode, null, cause);
}
public RuntimeException(String message, Throwable cause) {
//利用通用错误代码
this(GENERIC, message, cause);
}
public RuntimeException(Integer errorCode, String message, Throwable cause) {
super(message, cause);
this.errorCode = errorCode;
}
public Integer getErrorCode() {
return errorCode;
}
}
public Customer retrieveCustomerById(Long id) throw SQLException {
//根据 ID 查询数据库
}
public Customer retrieveCustomerById(Long id) {
try{
//根据 ID 查询数据库
}catch(SQLException e){
//利用非检测异常封装检测异常,降低层次耦合
throw new RuntimeException(SQLErrorCode, e);
}finally{
//关闭连接,清理资源
}
}`alert("Hello CSDN");`
public void retrieveObjectById(Long id){
try{
//..some code that throws SQLException
}catch(SQLException ex){
/**
*了解的人都知道,这里的异常打印毫无意义,仅仅是将错误堆栈输出到控制台。
* 而在 Production 环境中,需要将错误堆栈输出到日志。
* 而且这里 catch 处理之后程序继续执行,会导致进一步的问题*/
ex.printStacktrace();
}
}
public void retrieveObjectById(Long id){
try{
//..some code that throws SQLException
}
catch(SQLException ex){
throw new RuntimeException(“Exception in retieveObjectById”, ex);
}
finally{
//clean up resultset, statement, connection etc
}
}
for(int i=0; i<100; i++){
try{
}catch(XXXException e){
//….
}
}
public void retrieveObjectById(Long id){
try{
//…抛出 IOException 的代码调用
//…抛出 SQLException 的代码调用
}catch(Exception e){
//这里利用基类 Exception 捕捉的所有潜在的异常,如果多个层次这样捕捉,会丢失原始异常的有效信息
throw new RuntimeException(“Exception in retieveObjectById”, e);
}
}
public void retrieveObjectById(Long id){
try{
//..some code that throws RuntimeException, IOException, SQLException
}catch(IOException e){
//仅仅捕捉 IOException
throw new RuntimeException(/*指定这里 IOException 对应的错误代码*/code,“Exception in retieveObjectById”, e);
}catch(SQLException e){
//仅仅捕捉 SQLException
throw new RuntimeException(/*指定这里 SQLException 对应的错误代码*/code,“Exception in retieveObjectById”, e);
}
}
try{
//可能抛出 RuntimeException、IOExeption 或者其它;
//注意这里和误区六的区别,这里是一段代码抛出多种异常。以上是多段代码,各自抛出不同的异常
}catch(Exception e){
//一如既往的将 Exception 转换成 RuntimeException,但是这里的 e 其实是 RuntimeException 的实例,已经在前段代码中封装过
throw new RuntimeException(/**/code, /**/, e);
}
public class A {
private static Logger logger = LoggerFactory.getLogger(A.class);
public void process(){
try{
//实例化 B 类,可以换成其它注入等方式
B b = new B();
b.process();
//other code might cause exception
} catch(XXXException e){
//如果 B 类 process 方法抛出异常,异常会在 B 类中被打印,在这里也会被打印,从而会打印 2 次
logger.error(e);
throw new RuntimeException(/* 错误代码 */ errorCode, /*异常信息*/msg, e);
}
}
}
public class B{
private static Logger logger = LoggerFactory.getLogger(B.class);
public void process(){
try{
//可能抛出异常的代码
}
catch(XXXException e){
logger.error(e);
throw new RuntimeException(/* 错误代码 */ errorCode, /*异常信息*/msg, e);
}
}
}
public void retieveObjectById(Long id){
try{
//..some code that throws SQLException
}catch(SQLException ex){
//将参数信息添加到异常信息中
throw new RuntimeException(“Exception in retieveObjectById with Object Id :”+ id, ex);
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有