• 自定义exception


     
    转自:http://blog.csdn.net/jasph77/article/details/2223272
     
    本文讨论有关异常设计的问题,关注何时和怎么更好的使用异常类,设计符合自己系统的自己定义异常类。这里假设读者已经对java已经一定的了解,知道什么是java的异常,及其工作原理。读者想了解java 和 java异常相关知识,请拜读《Thinking in java 3rd 》(真实一本好书^_^)
    异常设计原则:
           异常表示没有遵守契约。如果一个事件表示了“异常条件”或者“没有遵守契约”,那么,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);
        }
    };

  • 相关阅读:
    创建一个新的进程os.fork
    进程的特征
    进程的状态
    多进程概念
    IO多路复用
    Objective-C 和 C++中指针的格式和.方法 和内存分配
    生活需要奋斗的目标
    iOS 关于UITableView的dequeueReusableCellWithIdentifier
    哈哈,发现了刚毕业时发布的求职帖子
    iOS 和Android中的基本日期处理
  • 原文地址:https://www.cnblogs.com/melody-emma/p/4975629.html
Copyright © 2020-2023  润新知