您的位置:首页 > 职场人生

黑马程序员-异常

2014-01-03 00:15 127 查看
-----------android培训java培训、java学习型技术博客、期待与您交流!
------------


(感觉自己最近为了赶进度,很久没有总结回顾以前的知识,今天开始要深刻反思)

异常

1.1.异常概念:就是程序出现的不正常情况。

1.2.异常体系:

Throwable类
|--Error类 严重的问题,是处理不了的。要改正代码的。

|--Exception类 非RuntimeException的,是需要处理的。编译期异常。

|--RuntimeException类 不需要处理的,是需要改代码的。运行期异常。

例如:
Error:地震,海啸。

Exception:感冒了,头疼。

1.3.java虚拟机的默认处理方法.

把异常的类名,原因,位置等信息显示在控制台。

一旦有异常发生,其后的代码不能继续执行

1..4.异常的解决方案.

A:try方式
基本格式
try{
可能发生异常的代码;
}catch(异常类名 变量名){
异常的处理代码;
}finally{
释放资源的代码;
}


注意:一旦有一次发生,就会立马执行catch里面的代码

变形格式:

try...catch
try...catch...catch
try...catch...catch...finally
try...finally


注意: JDK7针对多个catch进行了优化:catch(异常1 | 异常2 | 异常3 ... 变量){}
这些异常必须是平级关系。

和try...catch...catch的不同点是:
JDK7的这种方案是必须平级关系,不能有子父关系。

而try...catch...catch父亲放最后是可以的。
B:抛出处理

用throws关键字在方法上声明(抛出)。(这种方法比较消极,不推荐使用)

1.5.Exception和RuntimeException的区别.

A:
Exception 编译时期异常,必须处理的。

如果在方法上,throws了该类型的异常,将来调用者必须处理。

如果在方法内部,throw了该类型的异常,必须在方法上throws该异常。
B:
RuntimeException 运行时期异常,是不需要处理的。要改代码的。

如果在方法上,throws了该类型的异常,不需要处理。

如果在方法内部,throw了该类型的异常,方法上可以throws该异常,也可以不throws该异常。

1.6.关于异常我的总结

throw:

1.
使用在方法内部,格式为:throw <异常对象>. (只能是单个对象)
2.throw不可以单独使用,要么搭配throws,将异常抛出给调用方法者;要么搭配try-catch-finally处理掉该异常.
throws:

1.
使用在方法声明上,在参数列表后与方法体前,格式为:throw <异常类>.(可以单个或者多个类,逗号分割)
2.throws可以单独使用,将可能抛出的异常抛出给调用方法者处理.(如果是主方法上使用,即由jvm异常处理机制处理). 

try{}:

try{}的大括号中,放入的为执行中可能会出现异常的代码.如果当中的代码在执行时出现异常,就会通过或人工定义(使用throw)或系统自动生成并抛出异常对象.
注意:当try{}代码块中执行时出现异常,抛出异常对象,下面的代码就不会执行了.

catch(){}:

catch(){}的小括号中为参数,参数应为对应try{}抛出异常对象的异常类或其父类.其大括号中为针对此异常的处理代码.当try{}抛出异常,由catch(){}捕获并处理.

这里因为对应的try{}可能抛出多种异常,可以一个try{}对应多个catch(){}.当然,()中对应的应为对应的每种异常类,而且遵从子类异常优先,父类异常殿后的顺序.
注意:JDK7的新特性,可以在catch(){}的参数中同时对应多个异常类,用|分割.

finally{}:

finally{}的大括号中放入的代码,无论try{}是否抛出异常catch(){}是否执行,它都会执行.一般用于关闭资源操作.
注意:有几个特殊情况
1.如果在try{}和catch(){}中出现了System.exit(0)语句,那就没办法,不执行了.
2.如果try{},catch(){}中出现了return语句,则finally{}中代码和return代码同时执行.
3.如果2中finally{}中也出现了return语句,那么先前的return语句会被finally{}中的return语句覆盖执行.

我的测试代码:
//代码体现
public static void main(String[] args) throws Exception{
new Test8().demoMethod();//调用方法中声明了异常,这里必须处理或者上抛.(这里我上抛,没处理)
}

//方法中的异常处理方式.
public void demoMethod() throws Exception{//如果方法中可能抛出异常,而没有对应的try-catch处理,那么就可以用throws向调用者声明,方法中会出现异常,由调用者处理.
try {
/*
* 运行可能会出现异常的代码.
*/
//if()的括号中为认为定义应该抛出某个异常的条件
if (true) {
throw new Exception();//抛出某一异常对象.
}
} catch (Exception e) {
/*
*  对应捕获到的异常进行的处理.
*/
}finally{
/*
* 必然会执行的代码.例如:关闭资源.删除临时文件.
*/
}

}


[b]-----------android培训java培训、java学习型技术博客、期待与您交流!
------------

[/b]
[b][b]详情请查看:http://edu.csdn.net/[/b]
[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息