Java中的异常机制
来源:互联网 发布:java怎么创建数组 编辑:程序博客网 时间:2024/06/11 15:17
异常机制是一门成熟的编程语言必不可少的一部分,Java同样也提供了成熟的异常处理机制,来保证程序的健壮性。Java中的异常机制主要依赖于try、catch、finally、throw、throws五个关键字实现的,不同的关键字对应不同的异常处理方式。
异常
Java中程序的非正常情况分为两种,一种是错误,也就是Error;一种是异常,也就是Exception,他们都是继承Throwable类。
Error:Error是错误,一般是与虚拟机相关的非正常情况,例如虚拟机错误、系统崩溃等,这种错误都是程序无法捕捉和处理的,遇到这种错误程序只能被终止。所以这些错误也不需要在程序中用catch块来捕获,或者采用throw关键字抛出Error或其子类。
Exception:异常是除去错误的非正常情况,通常可以在程序中处理,或者规范代码就可以避免的问题。从上面的图可以看出,Exception分为SQLException、IOException和RuntimeException。SQLException是操作数据库会出现的异常,IOException是IO操作时会遇见的异常,RuntimeException是程序运行时可能会出现的异常,看名字也可以了解到。RuntimeException是经常会遇到的异常,经常见到的超出边界异常、类型转换异常、空指针异常,比如迭代一个集合,当集合为null时就会报空指针异常;如果迭代之前先判空,然后再进行处理,这种异常就是可以避免的。同样的,其他异常也可以。
关键字
Java中异常机制的关键字有五个,分别是try、catch、finally、throw、throws。其中try和catch必须是成对出现的,不能只使用try或者catch;finally是需要跟在try...catch后面的,可以有也可以没有;throw和throws的作用是一样的,都是抛出异常,只不过用在不同的位置,throw用在方法体内,通常是在catch块中,而throws是使用在方法声明后面的。当方法声明后面有throws Exception时,在方法体内就不需要再使用try...catch或者throw了。
public void testException(){ FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream("D:\\test.txt"); fileInputStream.read(); }catch(FileNotFoundException e){ e.printStackTrace(); }catch (IOException e){ e.printStackTrace(); }finally { try { fileInputStream.close(); }catch (IOException e){ e.printStackTrace(); } }}
public void testException() throws IOException{ FileInputStream fileInputStream = null; try { fileInputStream = new FileInputStream("D:\\test.txt"); fileInputStream.read(); }catch(IOException e){ throw new FileNotFoundException("文件未找到"); }finally { try { fileInputStream.close(); }catch (IOException e){ e.printStackTrace(); } }}
当出现某一个异常该方法处理不了的时候,可以抛出异常,让调用该方法的方法去处理,这时就可以使用throws或throw,如上面代码所示。throws用于方法声明后面,可以在方法上抛出异常;throw用于方法体内,需要和catch一起用。
注意事项
1、异常类是有父子类之分的,所以如果代码中要使用多重catch,需要先catch子类异常,再catch父类异常。
2、捕获异常时,尽量catch相应的异常,而不是为了图方便,直接catchException。通常需要catch异常时,IDE都会有提示需要捕获哪一类异常。
3、异常机制虽然可以使得代码更健壮,但是也不能滥用异常,异常机制只能作为异常处理,尽量不要用来处理业务。
4、try块中的代码不宜很长,最好是哪句代码需要捕获异常,就包含哪句代码。可以确定没有异常的,不需要写在try块中。
5、finally中可以用来关闭程序中开启的资源,但是最好不要做方法的出口,会冲掉上面代码执行后的结果。
6、catch中捕获的异常,一定要做异常处理,不要直接吞掉异常,最不济还要做一个堆栈打印。
7、捕获异常后,能处理的异常要进行处理,不能处理的异常要抛给上层处理,但是抛出的异常一定要在程序的某一层进行处理。
总结
既然异常可以通过某些代码的规范来规避,那么了解编码规范就必不可少,写代码的时候该注意的问题也一定要注意。而且尽量要把异常往前提,能在编译期处理的不要等到运行时,能在编译前处理的就直接处理掉。异常机制虽然让代码变得简单得体,但是也不要过度使用异常处理,同时也要注意异常处理的编写规范,提高代码的维护性。
- java中的异常机制
- Java中的异常机制
- java中的异常机制
- java中的异常机制
- Java中的异常机制
- Java中的异常机制
- Java中的异常机制
- java中的异常机制
- Java中的异常机制
- Java中的异常处理机制
- JAVA中的异常捕捉机制
- Java中的异常处理机制
- JAVA中的异常处理机制
- Java中的异常处理机制
- java中的异常处理机制
- java中的异常处理机制
- java中的异常处理机制
- Java中的异常处理机制
- Adoby photoshop cs5永久序列号
- Copy和MUTableCopy
- CDOJ-1591(2017 UESTC Training for Graph Theory -A)
- Java中的String
- 将博客搬至CSDN
- Java中的异常机制
- 求组合数-费马小定理
- not in在结果集有null值的时候失效
- Winform用string类型的属性来绑定CheckBox
- json数组和json对象的包含关系
- Shell脚本:倒数计数的屏显小程序
- 矩阵的构造方法
- 12、ffmpeg笔记-使用Android Studio编写第一个ffmpeg程序
- 统计学习方法 -- 读书笔记