Java自定义Exception设计

异常设计原则:
       异常表示没有遵守契约 。如果一个事件表示了“异常条件”或者“没有遵守契约”,那么,Java程序所要做的就是抛出异常。
异常的类型:
       检查型异常checked和非检查型异常non-checked(运行时异常,RuntimeException和它的子类)。
       一般而言,表示类的误用的异常应该是非检查型异常。String类的chartAt()方法抛出的StringIndexOutOfBoundsException就是一个非检查型异常。SUN公司并不打算强制客户程序员每次调用charAt(int index)时都检查index参数的合法性。
       另一方面,java.io.FileInputStream类的read()方法抛出的是IOException,这是一个检查异常。这个异常表明尝试读取文件时出错了。这并不意味着客户程序员错误地使用了FileInputStream类,而是说这个方法无法履行它地职责,即从文件中读出下一个字节。FileInputStream类地设计者认为这个意外情况很普遍,也很重要,因而强制客户程序员处理之。
       意外情况是方法无法履行职责,而且很普遍的或者很重要的,调用者必须采取措那抛出检查型异常,反之,抛出非检查型异常。
自定义异常类
       为了很好的定位java程序的错误,加强系统的健壮性,避免NullPointerException错误的出现几率,需要建立一套完善的Java自定义Exception错误体系。
       自定错误命名规范:AH+错误类型+Exception。例:
检查型异常checked
public class AhDataBaseException extends Exception ...{
    public AhDataBaseException(String message, Throwable cause) ...{
        super(message,cause);
    }
}

public class ConnectionManager ...{
public ResultSet execSelectSQL(String sql) throws AhDataBaseException...{
        try ...{
            conn.setAutoCommit(true);
            PreparedStatement st = getPreparedStatement(sql);
            return st.executeQuery();
        } catch (SQLException e) ...{
            //e.printStackTrace();
            throw new AhDataBaseException(sql,e);               
        }
    }
}

<%
      ConnectionManager smgr = new ConnectionManager();
      String sql = "select MMSId from a_shipinfoais";
     try...{
          ResultSet  rs = smgr.execSelectSQL(sql);
          int i = 0;
          while(rs.next())...{
              i++;
              out.println(rs.getString("MMSI"));
              if (i>100) break;
          }
     }catch(AhDataBaseException e)...{
         e.printStackTrace();
     }    
  %>

非检查型异常non-checked:
public class AhCheckDataException extends RuntimeException ...{
    public AhCheckDataException (String message)...{
        super(message);
    }
}
public class Peoples...{
    private int num = 0;   //min = 0 ;max = 100
    public setnum(int value)...{
        if ((value<0)||(value>100))...{
            throw new AhCheckDataException("Out of bound. sun = "+value);
        }
    }
};
public class test...{
    public static void main(String[] argc)...{
        Peoples pps = new Peoples();
        pps.setnum(101);
    }
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值