博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动手动脑(异常处理)
阅读量:6831 次
发布时间:2019-06-26

本文共 4892 字,大约阅读时间需要 16 分钟。

1.请阅读并运行AboutException.java示例,然后通过后面的几页PPT了解java中实现异常处理的基本知识

源代码

import javax.swing.*;public class AboutException {   public static void main(String[] a)    {      int i=1, j=0, k;      k=i/j;    try    {                k = i/j;    // Causes division-by-zero exception        //throw new Exception("Hello.Exception!");    }        catch ( ArithmeticException e)    {        System.out.println("被0除.  "+ e.getMessage());    }        catch (Exception e)    {        if (e instanceof ArithmeticException)             System.out.println("被0除");        else        {              System.out.println(e.getMessage());                    }    }        finally     {             JOptionPane.showConfirmDialog(null,"OK");     }          }}

实验结果截图

2.请尝试解释以下奇怪现象

jvm在处理浮点数时,生成的是ddiv字节码指令,i/0,0转化为浮点数0.0,而0.0是double类型的,并不精确,所以不会抛出异常。

jvm在处理整数时,生成的是idiv字节码指令,整数除0就是除0,会抛出异常。

3.阅读以下代码(CatchWho.java),写出程序运行结果:

源代码

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");         }     } }

结果截图

4.写出CatchWho2.java程序运行的结果

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");         }     } }

结果截图

try catch这一模式,是有顺序依据的,当执行try语句是,紧接着的就是所对应的catch来执行,然后接着catch继续执行下去。

5.请先阅读 EmbedFinally.java示例,再运行它,观察其输出并进行总结。

public class EmbededFinally {        public static void main(String args[]) {                int result;                try {                        System.out.println("in Level 1");                        try {                                System.out.println("in Level 2");  // result=100/0;  //Level 2                                try {                                        System.out.println("in Level 3");                                           result=100/0;  //Level 3                                }                                 catch (Exception e) {                                        System.out.println("Level 3:" + e.getClass().toString());                                }                                                finally {                                        System.out.println("In Level 3 finally");                                }                                               // result=100/0;  //Level 2                            }                        catch (Exception e) {                                System.out.println("Level 2:" + e.getClass().toString());                        }             finally {                                System.out.println("In Level 2 finally");                        }                         // result = 100 / 0;  //level 1                }                 catch (Exception e) {                        System.out.println("Level 1:" + e.getClass().toString());                }                finally {                    System.out.println("In Level 1 finally");                }        }}

结果截图

总结:

  finally是无论是否出现异常都会执行的,在第三个try中出现异常,紧跟着的catch已经接收到,但此并不算第二个try出现异常,因为异常已经解决,那么之后就不会显示第二个和第一个catch的内容了。

6.辨析:finally语句块一定会执行吗?

请通过 SystemExitAndFinally.java示例程序回答上述问题

源程序

public class SystemExitAndFinally {        public static void main(String[] args)    {                try{                        System.out.println("in main");                        throw new Exception("Exception is thrown in main");                    //System.exit(0);                }                catch(Exception e)            {                        System.out.println(e.getMessage());                        System.exit(0);                }                finally                {                        System.out.println("in finally");                }        }}

结果截图:

JVM是java虚拟机,finally是由JVM保证执行,而System.exit(0)是正常退出程序,结束JVM的运行,那么最后finally就不再执行。

    finally语句不被执行的唯一情况是先执行了用于终止程序的System.exit()方法。

转载于:https://www.cnblogs.com/liujinxin123/p/9938671.html

你可能感兴趣的文章
P - A + B(第二季水)
查看>>
Atitit. 真正的全中国文字attilax易语言的特点以及范例
查看>>
iOS开发--AVFoundation自定义相机
查看>>
阅读GIC-500 Technical Reference Manual笔记
查看>>
JavaWeb学习总结(二) Servlet
查看>>
各类注解笔记:
查看>>
【Python】存储数据
查看>>
WARN: Establishing SSL connection without server's identity verification is not recommended
查看>>
高性能分布式执行框架——Ray
查看>>
Art: Neural Style Transfer
查看>>
jsp注释<%-- -- %> 和 <!-- --> 的区别
查看>>
关于Linux操作系统层次结构分析
查看>>
ActiveMQ队列特性:删除不活动的队列(Delete Inactive Destinations)
查看>>
spring mvc之请求过程源码分析
查看>>
javascript中如何做对象的类型判断
查看>>
【转】阿里去IOE运动
查看>>
ZOJ-1455 Schedule Problem 差分约束
查看>>
synchronized详解
查看>>
2013南京邀请赛小结——ACM两年总结
查看>>
自定义控件:(动画)(特效)AllAppList平面矩阵3D效果
查看>>