Java Exception——Java中的异常处理流程

在Java程序设计语言中,异常对象都是派生于Throwable类的一个实例。如果Java中内置的异常类不能够满足需求,用户可以创建自己的异常类。

异常的捕获与处理:

try{

可能出现异常的语句

}catch(异常类型 异常对象){

处理异常

}catch(异常类型 异常对象){

处理异常

}[finally{不管是否出现异常,都会执行此句}]

         如果在try块中产生了异常,则程序会跳转到catch语句中找到匹配的异常类型进行相应的处理。最后不管程序是否会产生异常,肯定会执行到finally语句,finally语句就作为异常的统一出口。

ErrorException的区别:

         Error:指的是JVM错误,这个时候的程序并没有执行,无法处理。

         Exception:指的是程序中出现的错误信息,可以进行异常处理。

Java语言规范将派生于Error类或RuntimeException类的多有异常称为未检查(unchecked)异常,所有其他的异常称为已检查(checked)异常。

Java的异常处理流程:

a)      如果程序中产生了异常,那么会自动的由JVM根据异常的类型实例化一个指定异常类的对象;

b)      如果程序中没有任何异常处理操作,则这个异常类的实例化对象将交给JVM进行处理,而JVM的默认处理方式就是将异常信息输出,而后中断程序执行;

c)      如果程序中存在了异常处理,会由try语句捕获产生的异常对象;

d)      try之后的每一个catch进行匹配,如果匹配成功,则使用指定的catch进行处理,如果没有匹配成功,则向后面的catch继续匹配,如果没有任何的catch匹配成功,将交给JVM执行默认处理;

e)      不管是否有异常都会执行finally程序,如果此时没有异常,执行完finally会继续执行程序中的其他代码,如果此时有异常没能够处理(没有一个catch可以满足)。那么也会执行finally,但是执行完finally后,将交给JVM执行默认处理。

注意:在Java中,所有捕获范围小的异常类型,必须放在捕获范围大的异常类型前,否则会在编译的时候报错。

throws关键字

         Throws关键字主要是在方法的定义上使用的,表示此方法不进行异常的处理,而交给被调用处处理。

throwthrows的区别:

a)      Throw:用户手工抛出异常类的实例化对象;

b)      Throws:用于方法的声明上,表示此方法不处理异常,而将异常交给程序被调用处处理。

RuntimeExceptionException的区别:

a)      异常(Exception)表示程序运行过程中可能出现的非正常状态,运行时异常(RuntimeException)表示虚拟机的通产操作中可能遇到的异常,是一种常见运行错误。Java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常,即Exception定义了必须处理的异常,而RuntimeException定义的异常可以选择性的进行处理。

b)      RuntimeExceptionException的子类;

c)      常见的RuntimeExceptionNumberFormatExceptionClassCastExceptionNullPointerExceptionArithmeticExceptionArrayIndexOutOfBoundsException

创建自己的异常类,需要做的是定义一个派生于Exception的类,或者派生于Exception子类的类。

断言 assert

         断言指的是程序执行到某行后,其结果一定是预期的结果。

么时候使用assert?

         Assert(断言)在软件开发中是一种常见的调试方式,很多开发语言都支持这种机制。在实际使用中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个Boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态,系统将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。Assertion检查通常在开发和测试时开启,为了提高性能,在项目发布后,assertion检查通常是关闭的。

你可能感兴趣的:(Java Exception——Java中的异常处理流程)