异常是系统内建的机制,可以优雅的处理程序的出错。
编程时通常有两种代码,一种是业务代码,另一种是错误处理代码。例如在操作文件时要检查文件是否存在,执行sql时数据库是否已打开。在传统的程序,检查处理出错的代码是很烦的,有时候影响到业务代码的阅读,在sun的教材把这些代码称为“意大利面条”风格的代码。下面是一个用伪码操作数据库的例子:
connection conn = new connection();
//检查连接是否已经打开
if(conn.open()==true){
Statement stmt = conn.createStatement();
String sql = "select * ....";
boolean b = stmt.executeSql(sql);
if(b==true){
print("succeed.");
}
else{
print("failed of sql exception");
}
}
else{
print("failed to establish connection");
}
用c/vb/c++语言写的代码多数是这样。在一个if语句检查第一个条件,然后在更深的层次里检查第二个条件,然后在更深更深的层次里检查第三个条件……如果可能出错的代码有n层,那么检查就会持续到n层。不利于代码的阅读。
java提出用一种“优雅”的机制来处理这些类型的检查。这就是异常。所有检查都在第一层进行,就算错误在最内层发生,内建的机制也会让异常在栈里冒泡,直到可以被最外层的代码检查到。用java的例子如下:
try{
//1
connection conn = new connection();
Statement stmt = conn.createStatement();
String sql = "select * ....";
stmt.executeSql(sql);
//4
}
catch(ConnectionException ce){
print("failed to establish connection" + ce);
}
catch(SqlException sqle){
print("failed when executing sql:" + sqle);
}
这样,1,4之间就是纯粹的业务代码。一目了然。
这就是异常的基础知识。