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

黑马程序员——浅析异常

2015-04-29 20:54 176 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

浅析java异常

1、基本概念

当出现程序无法控制的外部环境问题(用户提供的文件不存在,文件内容损坏,网络不可用。。。)时JAVA就会用异常对象来描述。

2、JAVA中有两种处理异常的办法:

1、在发生异常的地方直接处理; 2、将异常抛给调用者,让调用者处理。


3、异常分类

(1)检查性异常即编译异常:java.lang.Exception

(2)运行期异常:java.Runtime.Exception

请务必记住:只能在代码中忽略RuntimeException及其子类,究其原因是因为RutimeException代表的是编程错误。

(3)错误:java.lang.Error

顶层是java.lang.Throwale类,检查项异常,运行期异常,错误都是这个类的子孙类。java.lang.Exception、 java.lang.Error都继承自java.lang.Throwale,而java.Runtime.Exception继承自java.lang.Exception。

想要对异常有更深刻的理解最好去浏览一下API帮助文档,对异常来说关键是理解概念以及如何使用。

4、异常类的常用方法

Exception类有自己的数据成员和成员方法。其构造方法为:public Exception() public Exception(String s)

其公有方法为(都是从Throwable继承来的)

public String getMessage()返回异常信息

public String toString()返回异常类型的简要说明

public void printStackTrace()输出调用堆栈路径

5、异常的终止与恢复

异常处理理论上有两种基本模型。Java支持终止模型。在这种模型中,将假设错误非常关键,以至于程序无法返回到异常发生的地方继续执行。一旦异常被抛出,就表明错误已经无法挽回,也不能回来继续执行。

另一种成为恢复模型。意思是异常处理程序的工作是修正错误,然后重新尝试调用出问题的方法,并认为第二次能成功。对于恢复模型,通常希望异常被处理以后能继续执行程序。如果想用java实现类似的恢复行为,那么遇见错误时就不能抛出异常,而是调用方法来修正该错误。或者把try块放到while循环里,这样不断的进入try块,直到得到满意的结果。

长久以来,尽管程序员使用的操作系统支持恢复模型的异常处理,但他们最终还是转向使用类似“终止模型的代码”,并且忽略恢复行为。所以虽然恢复模型开始很吸引人,但不是很实用。其主要原因可能是它所导致的耦合:恢复性的处理程序需要了解异常抛出的地点,这势必包含依赖于抛出位置的非通用性代码。这正加了代码编写和维护的困难,对于异常可能会从很多地方抛出的大型程序来说,更是如此。

6、java异常处理机制

1、try。。。Catch

程序运行产生异常时,将从异常发生点中断程序并向外抛出异常信息。

2.Finally

如果把finally块置于try。。Catch。。语句后,finally块一般都会得到执行,它相当与一个万能保险,及时前面的try块发生异常,而又没有对应异常的catch块,finally块将马上执行。Finally一般出一个清理工作:java有垃圾回收机制所以内存释放不再是问题,需要清理的资源一般包括:已经打开的文件或网络,在屏幕上画的图形等。

以下情形,finally块将不会被执行:

(1)finally块中发生异常;

(2)程序所在的线程死亡;

(3)在前面代码中用了System.exit();

(4)关闭cpu。

7、方法声明抛出异常throws

程序员可以不在当前方法内处理异常,而是把异常抛出到调用方法中。

方法头声明抛出异常:

[修饰符] 返回类型 方法名([参数表])throws 异常类型1,异常类型2{

……

会产生异常类型1异常的语句

……

会产生异常类型2异常的语句

……

}

运行时异常(RuntimeException类及其子类)可以不被处理,

同样,运行时异常若不处理,也可以不用throws声明,但其他异常若在方法内不被处理,则必须用throws声明。

调用声明抛出异常的方法时,需要进行异常处理,或者也将异常抛出,由其上级调用者处理。

异常的传播过程

发现异常的方法若不能处理异常,这时异常被抛出给其上级调用者。

如果调用者也不能处理这个异常,还可以继续传递给上级调用者去处理,这种传播会一直继续到异常被处理为止。

如果程序始终没处理这个异常,异常会传递到Java虚拟机运行时系统,运行时系统捕获这异常后通常只是简单地终止这个程序。

8、抛出自定义异常

自定义异常:从Exception继承的类

异常类中可以有与异常相关的属性和方法,可以被异常处理调用

在方法内抛出自定义异常

方法体内:创建异常对象,并抛出。

throw 异常对象;

方法头:声明抛出异常列表



以上便是我对异常的简单的理解,记录下来方便以后需查阅,如能帮到某位码友,是我的荣幸。如有不周还望海涵


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: