Java自定义Exception设计

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

     }
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);
    }

}
;

参考了:感谢Bill等几位前辈,使我对java的Exception有了更深一步的了解,特写此文记录只用!

声明:作者保留文章版权,如有转帖请注明出处!没有作者书面许可不得修改和出版!

 

你可能感兴趣的:(exception,java,class,string,sql,sun)