*基本介绍:java语言中,将程序执行中发生的不正常的情况叫做异常。(开发中语法的错误或逻辑的错误不叫异常)
*异常的分类
1,Error(错误):Java虚拟机无法解决的问题。如:JVM系统内部错误,资源耗尽问题。
2,Exception:其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性代码进行处理。
Exception分为两大类:运行时异常【程序运行时发生的异常】和编译时异常【编程时,编译器检查出的异常】
*异常的体系图:
1,异常分为两大类,运行时异常和编译时异常【当在一个方法中使用throws抛出一个编译时异常时,另外一个方法在调用时必须要使用try-catch处理或者throws抛出异常,
如果一个方法使用throws抛出的一个运行时异常时,另外一个方法在调用时可以不出来,因为默认处理机制(默认抛出运行时异常给JVM)】
2,运行时异常,编译器检查不出来。一般是指编程时的逻辑错误。是程序员可以避免其出现的异常。java.lang.RuntimeException类及它的子类都是运行时异常
3,对于运行时异常,可以不做处理,因为这类异常很普遍,若全处理对程序的可读性和运行效率有影响
4,编译时异常,是编译器要求必须处置的异常
异常处理:
*基本介绍:异常处理就是在异常发生时,对异常的处理
*异常处理的方式
1,try-catch-finally:程序员在代码中捕获发生的异常,自行处理
1):Java提供try和catch块来处理异常,try块中包含可能出错的代码。catch块中用于处理try块中发生的异常,可以根据需求在程序中有多个try。。catch块。
2)基本语法
try{
可疑代码
}catch(异常){//将异常生成对应的异常对象,传递给catch块
对异常的处理
}finally{}//finally块可有可无
3)注意事项:
1,如果异常发生了,则异常后面的代码不会执行,直接进入catch块
2,如果异常没有发生,则顺序执行try的代码块,不会进入catch块
3,如果希望不管是否发生异常,都执行某段代码,则使用finally{}
4,可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前【Exceptin在后,NullPointerException在前】,如果发生异常,只会匹配一个catch块
5,可以进行try{}-finally{}配合使用,这种用法相当于没有捕获和处理异常,因此程序会崩掉。
4)小结:
1,如果没有出现异常,则执行try块中所有的语句,不执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句
2,如果出现异常,则try块中异常发生后,try块剩下的语句不再执行,将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句【即使catch块中有return,也不会返回,必须先执行完finally中的语句才返回。】
2,throws:将发生的异常抛出,交给调用者(方法)来处理,最*的处理者是JVM
1)基本介绍:
1,如果一个方法(中的语句执行时)可能生出某种异常,d但是并不确定如何处理异常,则此方法应该显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由方法的调用者负责处理。
2,在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类
2)注意事项:
1,对于编译异常,程序中必须处理,比如try-catch或throws
2,对于运行时异常,程序中如果没有处理,默认就是throws的方式处理【Java中默认的处理机制】
3,子类重写父类的方法时,对抛出的异常规定:子类重写的方,所抛出的异常要么和父类的保持一致,要么为父类抛出的异常的类型的子类型
4,在throws过程中,如果有方法try-catch,就相当于处理异常,就不必throws
3,自定义异常(throw):
1)基本介绍:当程序中出现某些错误,但该错误并没有在Throwalbe子类中描述,这个时候可以自己设计异常类,用于描述该错误信息
4,throw和throws区别