1.异常是程序在运行中由于算法问或软件设计等问题导致的程序异常事件。
2.异常的前提是可以识别并被捕获的。
3.Java以面向对象的方法来处理异常的;Java提供了各种类型的异常类。
1.程序运行若发生异常,就会触发能被监听捕获的异常事件,该事件的处理程序会生成一个异常对象并交给JVM,有JVM查找相应的代码处理该异常。
2.生成异常对象并将其交给JVM的过程称为捕获异常。
3.异常本身作为一个对象,即产生一个异常就是产生一个异常对象;异常对象可能由应用程序本身产 生,也可能由JVM产生,这取决于异常的种类。
1.每个异常类都代表一种运行错误,类中包含错误信息及错误处理的方法等内容。
2.异常本质上是一个程序运行时发生的事件,该事件将导致程序的运行中断;尽管如此,在处理异常的代码中可以调整程序运行的方向,使程序仍可继续执行。
程序产生异常,系统捕获异常,程序员编写异常处理程序。
1.在 Java 中,Throwable 类是 Java 语言中所有错误或异常的超类,它有两个直接子类:Error和Exception。
2.Error类及其子类代表了程序运行时Java系统内部的错误,程序设计者无能为力,程序也不能从Error中恢复,因此不必处理它们,从技术上讲Error不是异常。
3.Exception类及其子类代表了用户程序能够捕捉到的异常,因此应该是程序设计者要关心的、尽可能要处理的部分。
1.当某些内部错误发生时Java jvm可以产生异常 ,但这些异常不在你的控制范围以内,通常程序不会处理这些异常的。
2.由代码中的错误,如除以零或数组索引越界等导致的标准异常, 这种异常需要程序开发人员来处理。
3.通过使用throw语句无论异常是如何产生的,处理异常的方式都是一样的 。
try{
要检查的语句序列:可能要抛出异常的代码
} catch(异常类名 形参对象名){
异常发生时处理的语句序列
} finally {
无论是否产生异常,都要执行这部分语句
}
1.多异常需要程序设计者熟悉各类异常。初学者在不熟悉各种异常类的情况下可以使用Exception类。
2.多异常的处理思想与switch-case结构非常类似。
1.在捕获异常之前,必须有一段代码生成并抛出一个异常对象。
2.异常类型不同,抛出异常的方法也不同,分为:系统自动抛出的异常、指定方法抛 出的异常。
3.系统定义的异常由系统抛出;指定方法抛出的异常需使用关键字throw或throws;
1.抛出异常的方法与调用方法处理异常
1.异常的产生和处理可以在一个方法内进行;
2.异常的产生和处理也可以不在一个方法中,即一个方法产生异常,由该方法的调用者去处理异常。
1.抛出异常的方法
1.在方法体内使用throw抛出异常:throw 由异常类产生的对象;
2.在方法头部添加throws抛出异常:
[修饰符] 返回值类型 方法名([参数列表]) throws 异常列表{
… …
}
上述两种方式抛出异常,在该方法内就不必提供try-catch-finally 块去处理异常,有调用者的程序处理。
2.处理异常的方法
如果程序设计者调用了一个会抛出异常的方法,要么处理这个异常,要么将异常继续抛出。
1.Java 对 Exception 类中的异常可分为受检查型异常和非检查型异常两大类。
2.所有非检查型异常都是RuntimeException类的子类,Java编译器对非检 查型异常不要求进行捕获和处理也能通过编译;而对不是RuntimeException类子类的异常则都是受检查型异常,即如方法 抛出这类异常,调用者必须处理该异常。
3.对于受检查型异常,如果调用者不处理,则必须在最后的 main 方法中将 异常提交给系统。
1.自定义异常类要继承于Exception类或其子类,或其它异常类。
2.为自定义异常类声明字段(属性)成员、方法成员或重写父类的字段和方法。
3.自定义异常类至少要定义两个构造方法:一个是无参的;另外一个是带 String参数的,目的是将此字符串传递给父构造方法,同时这个String的 信息作为该异常对象的描述信息。
4.最后,起一个能标识异常情况的有意义的名字。