对于目前java的学习阶段,异常处理虽说实际意义还没体现,花个时间看看总结下总比不知道好,在实际开发中是不得不考虑的问题。
异常处理的概念
为了处理一些代码无法掌握的状况,好多语言都设计了一个处理机制,我们叫它异常处理机制。例如:文件不存在,数据库未连接,网络无法连接等。JAVA为无法掌握的各种情况都设计了对应的类(对象),如果发生该情况,则系统(JVM )创建该对象,将该对象扔给程序员代码。简单的说,异常是系统创建的对象;异常对象是java设计出来抛给程序员的一个对象。
异常处理的分类
异常的分类按功能大概分:IO Exception ,SQL Ecception,NET Exception,RunTime Exception,Event Exception......
所有的异常都属于Exception的子集。
处理异常
java提供了两种处理机制,机制一:try{} catch(){} ; 机制二: throws xxx Exception;我们管机制一叫手动处理模式(负责模式),机制二叫不负责处理模式。
不负责模式
出现异常的代码所在的代码后,throws XXXException.它的含义是,我不想处理,谁调用谁处理。还有种情况,我们调用别人的方法, 别人的方法 后有throws XXXException语句 则,我们必须处理,不处理,编译同不过。这种情况,其实最大的好处,就是提醒 别人我有异常,对方应该注意到。
负责模式
try{
...
...
...
有可能异常的代码
...
...
...
}
catch(XXXException ex){
处理代码
}
。。。
正常代码
。。。
。。。
上面的结构就是,如果,发生异常,系统就抛出异常对象,将异常对象传递给ex,进入catch(){}处理模块,catch()模块处理完成后,继续执行try{}后面的语句。
你比如说下面这个例子
try{
...代码1
...代码2*****
...代码3
有可能异常的代码
...代码4
...
...
}
catch(XXXException ex){
处理代码
}
。。。
正常代码18
。。。
。。。
代码2发生异常,执行完catch()后,系统将执行正常代码18,而不是代码3.
看起来总结前辈们的经验说:实际开发中,尽可能的多try{},或者try{}中代码尽可能的少,应该对各种异常,进行各种分门别类的处理。还有一个残酷的真相:真实的开发中,异常处理的代码要远远的多余正常的代码,大概齐:3:1;前辈们的经验是:在开发中,先别管异常,先一门心思 搞功能。、
对于try{}...catch()....finnally() 情况,finally{}的意思是,不管前面是否发生异常,都要执行finally{}语句,在实际中,如果catch()中有return ,则catch()后的代码,就没有机会执行,但是,如果后面有finally(),则,必须执行完finall{}才return。如果catch()中有System.exit(0),则finally{}也不执行。一般来书,finally中放置的代码,都是资源释放类代码。
自定义异常
在开发中,我们可以自己创建一个异常类,然后自己创建异常对象,自己抛出,
class MyException extends Exception{
public String toString(){
return "我是异常";
}
}
class AA{
public static void main(String [] args) {
int i=3;
if(i==3){
MyException mye = new MyException();
throw mye;
}
}
}
异常是可以可以携带数据的对象,我们提供了一种非return方式,向别人传递数据的机会。