目录
1.错误和异常
内部错误:程序员通常无能为力,一旦发生,想办法让程序优雅的结束 。
异常:你自己程序导致的问题,可以捕获、可以处理,即程序中非正常事件,导致程序不按照预期执行。
针对错误和异常发生的情况,往往是用户输入的错误,设备错误或者一些物理限制造成的。
而面对错误我们是无能为力的,我们只好对异常Exception进行处理。
2.异常的分类
根据异常的种类,往往分为两类:运行时异常和其他异常。
运行时异常:由程序员在代码里处理不当造成的异常。
该异常是由于程序中源代码中引入的故障造成。
例如:类型转换,数组越界,空指针等。
想要避免该类一场,需要程序员对代码进行提前验证。
其他异常:外部原因引起。
该类异常属于程序员无法完全控制的外在因素导致。
例如:读取文件末尾,打开不存在的文件等。
3.检查型异常和非检查型异常
何为检查型异常,何为非检查型异常,Java对于这两种定义的很简单。
将派生于Error或者RuntimeException的异常称为unchecked异常,所有其他的异常称为checked异常。
对于非检查型异常,在编译时不需要采用try…catch方法处理。换言之,可以不进行处理,编译没有任何问题,但这就会导致程序中含有潜在的bug。
而对于检查型异常,必须进行捕获并且指定错误处理器进行处理,否则的话编译是无法通过的。
当要决定是采用checked exception还是unchecked exception的时候,问一个问题:“如果这种异常一旦抛出,client会做 怎样的补救?”
– 如果客户端可以通过其他的方法恢复异常,那么采用checked exception;
– 如果客户端对出现的这种异常无能为力,那么采用unchecked exception;
– 异常出现的时候,要做一些试图恢复它的动作而不要仅仅的打印它的信息。
同时,程序员在编写程序时,尽量使用unchecked exception来处理编程错误:因为unchecked exception不用使客户端代码显式的处理它们,它们自己会在出现的地 方挂起程序并打印出异常信息。
总结一点就是:Checked exception应该让客户端从中得到丰富的信息。 – 要想让代码更加易读,倾向于用unchecked exception来处理程序中的错误
4.异常处理
如上图这个程序,发生的就是典型的异常,数组越界,这里定义的整数数组边界为10,而赋值是超过数组边界,程序会抛出异常。
为了让程序不抛出异常,而是对用户进行有用的提示,可以采用
try{
/*
发生异常的程序
*/
} catch (Exception ex) {
/*
捕获到异常后进行信息处理
*/
}
方式来进行异常信息处理。
需要注意以下几点:
1.当try块中抛出在catch子句中指定的异常时,将忽略出现异常位置之后的代码 ,由catch子句进行异常处理。
2.无异常抛出时,catch子句不执行 。
3.如果抛出的异常,在catch语句中没有匹配的异常处理,则被访问的程 序退出(由client处理)。