异常机制已经成为很多语言的一种判断其成熟度的标准,除了C之外,其他的主流编程语言比如java,C#,Ruby等都提供了成熟的异常处理机制,异常机制可以使得程序中异常处理代码和正常业务代码的分离,保证程序代码更加优雅,并可以提高程序的健壮性。
网上关于java异常处理机制的文章有很多,我只写一下我觉得可能需要注意的地方。
1:在java中处理异常主要有五个关键字:try catch finally throw throws。
throw与throws的区别是前者可以可以直接抛出一个异常,可以当做单独的语句使用,后者主要是在方法签名中使用,用于申明该方法可能抛出的异常。
2:java将异常分为两种 ①:checked异常②:Runtime异常,java认为Checked异常都是可以在编译阶段被处理的异常,所以强制程序程序处理所有的Checked异常,常见的Checked异常比如IOException,SqlException。所有的异常都继承自Exception类,在异常中很少有接口。Exception和Error类又继承自Throwable类。
3:程序捕获异常和不捕获异常的区别是这样的,如果捕获该异常并且在catch块中处理那么程序将从捕获的地方继续向下执行,如果不捕获而程序在运行时遇到异常,程序就会从运行时环境终止。请看下面的程序,模拟了一次异常的处理。
package testException;
public class test1 {
public void test(){
System.out.println("方法开始执行!");
//try {
throw new NullPointerException();
//} catch (Exception e) {
//System.out.println("遇到异常了");
//}
}
public static void main(String[] args) {
new test1().test();
System.out.println("方法执行结束");
}
}
上面的程序的输出是:
说明程序没有执行到结束就终止了,如果我们去掉注释那么程序的输出是:
上面这个例子很好的解释了捕获异常的意义,捕获异常的意义很重大,它能保证我们的程序更加健壮,比如有这样一种程序需要输入一个整数才能正常运行,否则抛出异常,那么客户在不知道的情况下输入了一个负数,那么我们是再给其一次机会还是直接让程序退出呢?很显然我们捕获异常然后告诉客户正确的输入方式,然后再让其输入是最好的。
4:try catch finally 通常是一起出现的,如果有try那么在catch和finally必定有且至少有一个。finally必须放在所有的catch之后。使用finally回收资源是大部分人会做的事情,因为垃圾回收不会回收任何的物理资源比如数据库的连接等。
在try中执行了return语句或者throw语句之后程序还是会执行finally中的代码这就是它存在的价值,当程序在try或者catch中遇到return或者throw,这两个语句都会导致该方法立即结束,但是系统并不会立即执行它们,而是去寻找该处理是不是包含finally块,如果没有,马上执行,如果有,就先执行finally块,然后跳回来执行return和throw。
那么我想如果finally中遇到了return和throw,会出现什么呢?
package testException;
public class test2 {
public String test(){
try {
return "try";
} catch (Exception e) {
return "catch";
}finally{
return "finally";
}
}
public static void main(String[] args) {
System.out.println(new test2().test());
}
}
程序输出的是finally,说明在这里程序就退出了,恩,以后这里要谨慎了。
5:关于throws声明爆出异常,它的思路是:当前方法方法不知道该如何处理这种类型的异常,该异常应该由上一级调用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用Throws声明抛出异常,该异常将交给JVM处理,JVM对异常的处理方法是:打印异常跟踪信息,并终止程序运行。
如果某段代码调用了一个throws申明的方法,该方法抛出了Checked异常,这表明该方法希望它的调用者来出来该异常,也就是说着段代码要么放在try块中显示的捕获该异常,要么代码处于另一个带throws申明抛出的方法中。
使用throws声明抛出异常有一个限制,①子类方法中声明抛出的异常类型应该是父类方法抛出的异常类型的子类或相同②子类方法中不允许比父类方法声明抛出更多异常。
6:我们经常会看到形如这样的一些堆栈信息,其实在java中,Throwable这个超类是有方法的,其中比较重要的有
public String getMessage()
/**比如如果是空指针异常那么返回就是这个信息
而不会是打印出跟踪栈信息
*/
public void printStackTrace();
/**
这个方法很复杂,在源代码中,可以看到很多类似的方法,
但无一例外的都有递归等的出现
*/
public void printStackTrace(PrintStream s);
private void printStackTraceAsCause(PrintStream s, StackTraceElement[] causedTrace);
public void printStackTrace(PrintWriter s) ;
那么我们知道了程序在打印错误信息的时候并没有那么简单。
现在看下面一个程序
package testException;
public class test3 {
public static void main(String[] args) throws SelfException{
firstMethod();
}
public static void firstMethod()throws SelfException{
secondMethod();
}
public static void secondMethod()throws SelfException{
thirdMethod();
}
public static void thirdMethod()throws SelfException{
throw new SelfException("自定义异常信息");
}
}
class SelfException extends Exception{
private static final long serialVersionUID = 1L;
public SelfException() {}
SelfException(String msg){
super(msg);
}
}
程序的处理结果是这样的
可以看到,在最初的程序是从15行开始抛出,然后交给12行,然后到第九行,然后到第6行,在main方法终止,这个过程就是java的异常跟踪栈,它清楚的记录了应用程序中执行停止的各个点,跟踪栈总是最内部的被调用方法逐渐上传,知道最外部业务炒作的起点,通常就是程序的入口main方法或者Thread类的run方法。
分享到:
相关推荐
14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理机制.zip14.java异常处理...
深入理解java异常处理机制,很详细的,去了,你们的!
java异常处理机制,异常的概念,发生的原因,throwable,捕获异常的简单思维导图
异常处理是Java语言的重要机制,正确、合理地处理异常对系统的健壮性和稳定性提供了强有力的支持。异常的处理主要包括捕捉异常、程序流程的跳转和异常处理语句块的定义等。
异常处理机制是面向对象语言普遍支持的提高软件可靠性的方法。作为两款被广泛使用的面向对象语言,C++和Java语言都支持异常处理机制...该算法可以同时支持C++和Java异常处理机制,并有效提高了抛出异常较多的程序的性能。
主要介绍了java异常处理机制示例(java抛出异常、捕获、断言),需要的朋友可以参考下
深入理解java异常处理机制Java开发Java经验技巧共19页.pdf.zip
java异常处理机制主要依赖于try,catch,finally,throw,throws五个关键字。 try 关键字后紧跟一个花括号括起来的代码块,简称try块。同理:下面的也被称为相应的块。 它里面可置引发异常的代码。catch后...
基于Java异常处理机制的研究,张军芳,肖华山,异常处理是Java语言的重要机制,有效地处理异常对程序的可靠性、健壮性是十分重要的。本文分析了异常处理机制的概念和指导原则,��
上海交通大学 Java语言程序设计 JAVA讲义 第08章 java异常处理机制(共45页).ppt 上海交通大学 Java语言程序设计 JAVA讲义 第09章 Java输入输出及文件操作(共82页).ppt 上海交通大学 Java语言程序设计 JAVA讲义 ...
浅析Java异常处理机制.pdf
Java异常处理机制应用研究
Java异常处理机制及应用
【完整课程列表】 ...09 Java异常处理机制和调试(共32页).ppt 10 java集合框架(共27页).ppt 11 JAVA UI swing编程基础(共39页).ppt 12 AWT布局管理器(共14页).ppt 13 AWT事件处理模型(共29页).ppt
基于Java异常处理机制的软件健壮性研究最终版.pdf
Java异常处理机制及应用研究
基于Java异常处理机制的分析.pdf