java的错误和异常

图片来源:http://blog.csdn.net/wuwenxiang91322/article/details/10346337

java把异常当做对象来处理,并定义了一个基类java.lang.Throwable作为所有异常的超类。

1. Throwable

Throwable类是所有异常或者错误的超类,它有两个子类:Error和Exception。

2. Error

3. java异常

java提供了两种异常机制:编译时异常(RuntimeException)和运行时异常(Checked Exception)。

编译时异常(RuntimeException)是指java编译器能够检查的异常,必须对这些异常进行try catch,也就是必须声明和捕获。我们常见的IO异常和sql异常就属于编译时异常。

运行时异常(Checked Exception)是指不是功能本身导致的异常,是由于例如调用者传递参数而导致的异常,这种异常不需要声明不需要捕获,虚拟机会来接管,使程序停止让用户修改代码。

RuntimeException异常在java.lang包下,以下是常见的RuntimeException异常:

ClassCastException(类转换异常,试图将对象强制转换为不是实例的子类时,抛出该异常)

IndexOutOfBoundsException(数组越界,指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出)

NullPointerException(空指针,当应用程序试图在需要对象的地方使用 null 时,抛出该异常)

ArrayStoreException(数据存储异常,操作数组时类型不一致,试图将错误类型的对象存储到一个对象数组时抛出的异常)

BufferOverflowException(IO操作的异常)

IllegalArgumentException (抛出的异常表明向方法传递了一个不合法或不正确的参数)

4.异常的捕获和处理

java异常处理涉及到5个关键字:try、catch、finally、throw、throws。

(1)try:里面放置可能引发异常的代码。

(2)catch:对应异常类型和一个代码块,用于处理异常,可以有多个catch块。

(3)finally:主要用于回收try中打开的资源(数据库连接、网络连接、磁盘文件),异常机制总是保证finally块总是被执行。只有fianlly块执行完成以后才会来执行try或者catch块中的return或者throw等终止语句。

(4)throw:用于抛出一个实际异常,可单独作为语句使用,抛出一个具体的异常对象。

(5)throws:用在方法签名中,用于声明该方法可能抛出的异常。

5. throw和throws的区别

throw用于方法体内部,用来抛出一个Throwable异常。如果抛出了编译时异常,则还应该在方法头部声明方法可能抛出的异常类型。该方法的调用者也必须检查处理抛出的异常。如果所有方法都层层上抛获取的异常,最终JVM会处理,就是打印异常消息和堆栈信息。

throws用于方法体外部的方法声明部分,用来声明方法可能会抛出的某些异常。仅当抛出了编译时异常,该方法调用者才必须处理或者重新抛出该异常。当方法的调用者无力处理该异常的时候,应该继续抛出,而不是一般在catch中打印一下堆栈信息做个勉强处理。

参考文档:

https://blog.csdn.net/wuwenxiang91322/article/details/10346337

https://blog.csdn.net/huhui_cs/article/details/38817791

猜你喜欢

转载自www.cnblogs.com/cyydmlrs520/p/11350047.html