引言:
Hello,我的好朋友们,又到我们相聚的时间了,今天我要和大家分享一些有关java异常处理的相关
知识,也是通过老师的讲解和相关材料的借鉴之后的一个比较系统的总结,真心希望写完这篇文章的我和看过这篇文章的朋友们能更加深入理解java的异常处理机制。话不多说,我们一起来学习吧。
一、Java异常的基础知识
1.区别exception与error
异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。比如说,你的代码少了一个分号,那么运行出来结果是提示是错误java.lang.Error;如果你用System.out.println(2/0),那么你是因为你用0做了除数,会抛出java.lang.ArithmeticException的异常。
2.java异常的类别:
(1)运行时异常
( 有一个共同的父类:RuntimeException),一些常见的子类如下:
ArithmeticException:算术运算异常
NullPointerException:空指针异常
ArrayIndexOutOfBoundsException:数组下标越界异常
ClassCastException:类型转换异常
NumberFormatException:数字格式化异常
NegativeArraySizeException:负数组长度异常
ClassCastException:造型异常
NumberFormatException:数字转化格式异常
IllgalArgumentException:非法参数值异常
IllegalStateException:对象状态异常,如对未初始化的对象调用方法
InterruptedException:线程中断
(注意:对于运行时异常,为了程序的健壮性,可以用if来判断控制)
(2)编译时异常/非运行时异常/检测异常:
(Exception类中除了RuntimeException子类之外,都是编译时异常),一些常见的如下:
IOException:FileNotFoundException:指定文件未找到异常;
EOFException:读写文件尾异常;
MalformedURLException:URL格式错误异常;
SocketException:Socket通信异常。
其它异常:ClassNotFoundException:无法找到需要的类文件异常。
3.java异常处理用到的关键字及使用
try,catch,finally,throw,throws
使用的结构如下:
try{
//可能出现的异常程序代码(注:try仅仅能出现一次)
}catch(异常类型1 异常的变量名1){
//捕获到对应异常对象之后所做的处理1
}catch(异常类型2 异常的变量名2){
//捕获到对应异常对象之后所做的处理2
}
......(此处可以根据对应的异常而出现多次,切记小范围的异常写在前面,大范围的异常写在后面,因为异常是从上到下逐个捕获的)
finally{
//一定会执行的程序代码,多用于删除临时文件,关闭资源文件
(注:finally可以出现的次数为0-1次,切记当没有catch语句时一定要出现且仅出现一次finally)
}
4.处理两类异常(编译时异常和运行时异常)的方法不同
(1)编译时异常:
一般都是try-catch-finally处理掉。方法中可以不处理,用throws上抛,最终抛到了main,main方法 中禁止用throws上抛异常。意味着main一定要处理;
(2)运行时异常:
可以用try-catch-finally处理,但是对效率和代码阅读都有影响,所有一般都是用if条件来使程序健壮。
5.Throwable类的两个子类(Exception和Error)的区别与理解:
Throwable类Error好比车上山的过程中山塌了,即虚拟机处理不了了
Exception编译时异常:相当于车没油了,即需要java的积极处理
运行时异常:就像是路上的石子,让开它们行驶就好,即可以通过 if控制条件处理
6.自定义异常:
只能用throw来抛出,具体步骤如下:
(1).继承自Exception或者Exception的子类。
(2).提供String做参数的构造,利用父类的String做参数的构造完成初始化,String内容用于对异常的描述。
(未完待续。。。)