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