Java异常

来源:互联网 发布:九九乘法表java编程 编辑:程序博客网 时间:2024/06/04 18:27

Java程序中的非正常情况分为两种::错误(Error)和异常(Exception)。

错误(Error):一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误,内存不足等错误,程序因无法处理这些错误而中断。

异常(Exception):程序在编译和运行时出现的问题。如空指针,数组越界,除0等异常,程序可以捕获这些异常并处理。

一、java异常

java异常分为两大类:Checked Exception和Runtime Exception。

Checked Exception是在程序编译期出现的异常,这种异常是Java编译器强制要求处理的,要么用try-catch块捕获处理,要么用throws声明抛出,如果不处理,程序出错无法通过译。

Runtime Exception是在程序运行期出现的异常。这种异常是Java编译器不可预见的,如果不捕获处理,程序将终止,因此应该对这种异常进行捕获处理。

二、异常处理机制

抛出异常

在Java程序的执行过程中,如果出现了异常事件,就会产生一个异常对象,这个异常对象将提交给Java运行时环境JRE,这个产生异常和提交异常的过程叫做抛出异常。

抛出异常的三种方式:

1.系统自动抛出异常

执行程序代码时出现了异常,系统将抛出这个异常。

2.使用throws声明抛出异常

当某个方法可能抛出某种异常的时候可以用throws声明可能抛出的异常,交给这个方法的上一级调用者来处理。

3.使用throw抛出异常

当执行程序的时候出现某种情况的时候主动抛出异常,交给这个方法的上一级调用者来处理。

throws和throw的比较:

throws在方法签名处声明抛出异常,throw在方法体内抛出异常。

throws只是声明可能抛出这个异常,也有可能是不抛出的,throw被执行时一定会抛出异常。

捕获异常

当JRE接收到异常的时候,会寻找能处理该异常对象的catch块,找到合适的catch块并将该异常对象交给该catch块处理,这个过程叫做捕获异常。

如果JRE找不到捕获并处理异常的catch块,那么JRE将终止,Java程序将退出。

try-catch捕获异常: 

当try{ }中的程序出现异常,则该异常出现的位置之后的程序代码都不执行,JRE会依次判断产生的异常对象是否是catch{ }后的异常类或者其子类的实例,如果是,异常被捕获,在catch{ }中进行处理,如果不是,继续跟下一个catch{ }块中的异常类的实例进行比较。

使用finally{ }:

除非退出了程序,否则finally{ }一定会在try-catch后执行,可以用finally{ }来关闭一些资源比如数据库连接或者IO流等。

Java异常跟踪栈:

异常对象的printStackTrace()方法可以用于打印异常的跟踪栈信息。













0 0