java异常处理机制

1)在java语言中,通常将可能出现异常的语句放入try{}语句中,将出现错误后需要执行的语句放入到catch{}语句中,将无论是否发生异常都要执行的语句放在finally{}语句中。

2)当程序执行出现异常的时候,系统会抛出一个异常,然后由try{}语句中中出现异常的地方转到catch{}语句中。不过不管有没有异常产生,finally{}中的语句都将执行。

3)如果系统出现系统错误或者运行Runtime异常,jvm会结束程序运行,不一定会执行finally{}中的语句。

4)如果try{}中产生的异常在catch中没有处理,系统将停止程序,也不会执行finally中的语句。

多层异常处理

public class CatchWho {

public static void main(String[] args) {

try {

try {

throw new ArrayIndexOutOfBoundsException();

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println(  "ArrayIndexOutOfBoundsException" +  "/内层try-catch");

}

throw new ArithmeticException();

}

catch(ArithmeticException e) {

System.out.println("发生ArithmeticException");

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println(  "ArrayIndexOutOfBoundsException" + "/外层try-catch");

}

}

}

程序运行结果:

ArrayIndexOutOfBoundsException/内层try-catch

发生ArithmeticException

      

   分析:在本程序中,一个外部try{}catch{}语句中嵌套了一个try{}catch{}语句。内部的try{}语句中抛出一个ArrayIndexOutOfBoundsException,然后内部的catch{}语句捕捉到该异常并进行处理。然后外部try{}语句中抛出一个ArithmeticException异常,外部catch{}捕获异常进行处理。在程序中可以看到,外部共有两个catch{}语句。一个用来捕获ArrayIndexOutOfBoundsException异常,另一个用来捕获ArithmeticException,可是最后结果却是外部catch并没有捕获ArrayIndexOutOfBoundsException,只捕获了ArithmeticException异常,这是因为在内部的catch语句中已经将ArrayIndexOutBoundsException处理了。再来看以下代码:

public class CatchWho2 {

public static void main(String[] args) {

try {

try {

throw new ArrayIndexOutOfBoundsException();

}

catch(ArithmeticException e) {

System.out.println( "ArrayIndexOutOfBoundsException" + "/内层try-catch");

}

throw new ArithmeticException();

}

catch(ArithmeticException e) {

System.out.println("发生ArithmeticException");

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println( "ArrayIndexOutOfBoundsException" + "/外层try-catch");

}

}

}

运行结果

ArrayIndexOutOfBoundsException/外层try-catch

分析:在此程序中,内部try{}抛出的异常ArrayIndexOutOfBoundsException在内部catch语句中没有得到处理,所以外部try{}语句中抛出ArithmeticException的语句并没有执行,在外部的catch语句中ArrayIndexOutOfBoundsException被捕获所以执行了第二个catch{}语句中的内容。

多个try{}catch{}finally{}语句嵌套

当有多个try{}catch{}finally{}语句嵌套使用的首,根据异常在不同层次不同位置的抛出,是会造成finally语句不同的执行结果,这里的情况比较多,较为繁琐不做具体分析,但是总体原则是:一个异常抛出的语句到捕获这个异常的catch语句之间的语句,不论是try,catch,finally语句都不会执行。

关于finally语句是否一定会执行

请看以下代码:

public class SystemExitAndFinally {

public static void main(String[] args)

{

try{

System.out.println("in main");

throw new Exception("Exception is thrown in main");

}catch(Exception e) {

System.out.println(e.getMessage());

System.exit(0);

}finally{

System.out.println("in finally");

}

}

}

执行结果为:

in main

Exception is thrown in main

可见也不是任何情况下finally语句中的代码都会执行,此次是因为在处理异常的catch代码中执行了退出的方法。

java中的异常处理机制的更多相关文章

  1. Java 中的异常处理机制

    生活中的异常:  不能够完整而顺利的完成一些工作 根据不同的异常进行相应的处理,而不会就此终端我们的生活 引出:  异常处理: 方式:  1.选择结构(逻辑判断)避免 demo:if逻辑处理异常 im ...

  2. Java中的异常处理机制的简单原理和应用?

    程序运行过程中可能出现各种"非预期"情况,这些非预期情况可能导致程序非正常结束. 为了提高程序的健壮性,Java提供了异常处理机制: try { s1... s2... s3... ...

  3. 16、java中的异常处理机制

    异常:就是程序在运行时出现不正常情况.异常由来:问题也是现实生活中一个具体的事物,也可以通过java的类的形式进行描述.并封装成对象. 其实就是java对不正常情况进行描述后的对象体现. 对于问题的划 ...

  4. Java中的异常处理机制《》

    异常机制已经成为判断一门编程语言是否成熟的标准,异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性. Java异常机制主要依赖于try.catch.finall ...

  5. Java中的异常处理机制的简单原理和应用

    异常是指java程序运行时(非编译)所发生的非正常情况或错误,与现实生活中的事件很相似,现实生活中的事件可以包含事件发生的时间.地点.人物.情节等信息,可以用一个对象来表示,Java使用面向对象的方式 ...

  6. java中的异常处理机制_函数覆盖时的异常特点

    /*注意:异常声明在函数上 异常在子父类覆盖时的体现1.子类在覆盖父类时,如果父类的方法抛出异常,那么子类的覆盖方法,只能抛出父类的异常或者异常的子类2.如果父类方法抛出多个异常,那么子类在覆盖该方法 ...

  7. 【Java面试题】21 Java中的异常处理机制的简单原理和应用。

    异常指Java程序运行时(非编译)所发生的非正常情况或错误. java对异常进行了分类,不同类型的异常使用了不同的java类,所有异常的根类为java.lang.Throwable.Throwable ...

  8. java中的异常处理机制_finally的使用

    finally总结: finally代码块:定义一定执行的代码 通常用于关闭资源或者某些一定执行的代码 实例1:finally功能演示 class FuShuException extends Exc ...

  9. 43 java中的异常处理机制的简单原理和应用

随机推荐

  1. django User model

    django User model operation this tutorial will guide us to know how to manipulate django User model. ...

  2. php中empty和isset的区别

    比如: $_POST[ 'test']= ' ';那么: isset($_POST[ 'test']) ===> true; empty($_POST[ 'test']) ===> tru ...

  3. HTML如何转XTML

    ob_start(); $html = curl_init('http://www.beijing.gov.cn/'); curl_exec($html); $html = iconv('GBK',' ...

  4. zoj 1152 A Mathematical Curiosity

    方法:枚举 做这道题,在第十行的位置WA了很多次,(n || m)不能写成(n + m),m可能是负数,一直没注意到,导致不停的WA....... #include <stdio.h> i ...

  5. Magnum Kuernetes源码分析(一)

    Magnum版本说明 本文以magnum的mitaka版本代码为基础进行分析. Magnum Kubernetes Magnum主要支持的概念有bay,baymodel,node,pod,rc,ser ...

  6. Win7下python Scrapy一站式搭建全攻略(内附相关下载链接)

    写在前面: 好久没有登录博客了,意外看到之前的几篇文章都有不错的阅读量,开心极了,不过没有什么点赞和评论,大概是没有给大家带来什么切实的帮助吧.o(*////▽////*)q. 最近在NTU负责一个国 ...

  7. angularjs的directive详解

    Directive(指令)笔者认为是AngularJ非常强大而有有用的功能之一.它就相当于为我们写了公共的自定义DOM元素或CLASS属性或ATTR属性,并且它不只是单单如此,你还可以在它的基础上来操 ...

  8. windows环境自动获取SVN仓库当前版本

    如果我们的软件能够自动引入SVN修订号(仓库版本号),那么我们开发软件的时候就能快速定位bug出自哪个SVN版本.那么如何让软件直接自动生成并引用SVN版本号呢? 我们可以使用SVN info命令,在 ...

  9. DOM学习笔记--入门1

    HTML DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准. 首先节点有很多种,不仅仅HTML元素是节点,尤其 要注意文本节点的存在. 根据 W3C 的 HTML DOM 标准,HTML ...

  10. 网络爬虫之定向爬虫:爬取当当网2015年图书销售排行榜信息(Crawler)

    做了个爬虫,爬取当当网--2015年图书销售排行榜 TOP500 爬取的基本思想是:通过浏览网页,列出你所想要获取的信息,然后通过浏览网页的源码和检查(这里用的是chrome)来获相关信息的节点,最后 ...