Java异常处理

来源:互联网 发布:编程流程图 编辑:程序博客网 时间:2024/06/01 08:44

Java异常处理

异常发生的原因有很多,通常包含以下几大类:

用户输入了非法数据。

要打开的文件不存在。

网络通信时连接中断,或者JVM内存溢出。


要理解Java异常处理是如何工作的,你需要掌握以下三种类型的异常

检查性异常:最具代表的检查性异常是用户错误或问题引起的异常,这是程序员无法预见的。例如要打开一个不存在文件时,一个异常就发生了,这些异常在编译时不能被简单地忽略。

运行时异常: 运行时异常是可能被程序员避免的异常。与检查性异常相反,运行时异常可以在编译时被忽略。


错误:错误不是异常,而是脱离程序员控制的问题。错误在代码中通常被忽略。例如,当栈溢出时,一个错误就发生了,它们在编译也检查不到的。



finally关键字用来创建在try代码块后面执行的代码块。无论是否发生异常,finally代码块中的代码总会被执行

在finally代码块中,可以运行清理类型等收尾善后性质的语句。finally代码块出现在catch代码块最后

在Java中定义了两种类型的异常和错误

JVM(Java虚拟机)异常:由JVM抛出的异常或错误。

例如:NullPointerException类,ArrayIndexOutOfBoundsException类,ClassCastException类。

程序级异常:由程序或者API程序抛出的异常。例如IllegalArgumentException类,IllegalStateException类。


  • throw与throws区别

throws是用来声明一个方法可能抛出的所有异常信息,而throw则是指抛出的一个具体的异常类型。此外throws是将异常声明但是不处理,而是将异常往上传,谁调用我就交给谁处理。

throw用于抛出异常对象,后面跟的是异常对象;throw用在函数内。

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开。throws用在函数上。


throws格式:方法名(参数)throws 异常类1,异常类2,.....

throw:就是自己进行异常处理,处理的时候有两种方式,要么自己捕获异常(也就是try catch进行捕捉),要么声明抛出一个异常(就是throws 异常~~)


  • 自定义异常的步骤:

1:定义一个子类继承Exception或RuntimeException,让该类具备可抛性(既可以使用throw和throws去调用此类)。

2:通过throw 或者throws进行操作。


异常的转换思想:当出现的异常是调用者处理不了的,就需要将此异常转换为一个调用者可以处理的异常抛出。

 

记住:finally很有用,主要用户关闭资源。无论是否发生异常,资源都必须进行关闭。

System.exit(0); //退出jvm,只有这种情况finally不执行

 

注意:

如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果子类的覆盖的方法中出现了异常,只能try不能throws。

如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

 

异常(程序运行时可能出现的错误),编程的关键在于“防患于未然”


传统方式:if语句,现代方式:捕获异常机制;异常和处理分离;异常捕获结构:

try(语句块存放可能发生异常的Java语句) catch(从小到大,可以有多个,激发被捕获的异常,异常对象引用记录了异常的详细信息


finally(最后执行的部分,四种情况下不执行:

finally语句块中发生异常、前面代码有System.exit()、线程死亡、关闭CPU);

getMessage() 输出错误性质,

toString() 给出异常的类型与性质

printStackTrace() 指出异常的类型、性质、栈层次及出现在程序中的位置。异常是流程转移的有效手段。

  • 常见异常:

ClassCastException 类型转换异常

ClassNotFoundException找不到相应类异常

ArithmeticException算术异常

ArrayIndexOutOfBoundsException数组下标越界异常

ArrayStoreException数组中包含不兼容的值抛出异常

SQLException操作数据库异常

NullPointerException空指针

NoSuchFieldException字段未找到异常

NoSuchMethodException方法未找到异常

NumberFormatException字符串转换为数字异常

NegativeArraySizeExcepton数组元素个数为负数异常

StringIndexOutOfBoundsException字符串索引超出范围异常

IOException输入输出异常

IllegalAccessException不允许访问某类异常

EOFException文件已结束异常

FileNotFoundException文件未找到异常

 

Throwable类是所有异常类的父类Exception类(RuntimeException类<越界、转换问题、除法错误、空指针>)和error类(内存错误、栈溢出)。

参考地址

http://blog.csdn.net/qq_27280457/article/details/52052599

http://blog.csdn.net/woshixuye/article/details/8230407

http://blog.csdn.net/liu_jian140126/article/details/50517001

http://blog.csdn.net/junlixxu/article/details/6096266