zoukankan      html  css  js  c++  java
  • 第八周动手动脑

    动手动脑一:

    请阅读并运行AboutException.java示例

    AboutException.java

     答:

    结论:

    异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况。许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象。

    例如:数组越界和被0除

     动手动脑二:多层的异常捕获-1

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

     CatchWho

    答:运行结果:

    ArrayIndexOutOfBoundsException/内层try-catch

    发生ArithmeticException

    动手动脑二:多层的异常捕获-2

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

     CatchWho2

    答:运行结果:

    ArrayIndexOutOfBoundsException/外层try-catch

    动手动脑三:

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

     EmbededFinally

    答:运行结果:

    异常清除之前:

    Exception in thread "main" java.lang.Error: 无法解析的编译问题:

    标记“.”上有语法错误,删除此标记

    at ceshi.CatchWho2.main(CatchWho2.java:70)

    异常清除之后:

    in Level 1

    in Level 2

    in Level 3

    Level 3:class java.lang.ArithmeticException

    In Level 3 finally

    In Level 2 finally

    In Level 1 finally

    总结::当有多层嵌套的finally时,异常在不同的层次抛出,在不同的位置抛出,可能会导致不同的finally语句块执行顺序

    动手动脑三:

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

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

     SystemExitAndFinally

    答:运行结果:

    in main

    Exception is thrown in main

    结论:

    1.只有与 finally 相对应的 try 语句块得到执行的情况下,finally 语句块才会有执行的前提条件。

    2.如果在 try 语句块中执行了 System.exit (0) 语句,终止了 Java 虚拟机的运行,finally 语句块也不可以执行。

    3.当一个线程在执行 try 语句块或者 catch 语句块时被打断(interrupted)或者被终止(killed),与其相对应的 finally 语句块可能不会执行。

    4.更极端的情况,就是在线程运行 try 语句块或者 catch 语句块时,突然死机或者断电,finally 语句块肯定不会执行了。

    知识点:如何跟踪异常的传播路径?

    1.当程序中出现异常时,JVM会依据方法调用顺序依次查找有关的错误处理程序。

    2.可使用printStackTrace 和 getMessage方法了解异常发生的情况:

    3.printStackTrace:打印方法调用堆栈。

    4.每个Throwable类的对象都有一个getMessage方法,它返回一个字串,这个字串是在Exception构造函数中传入的,通常让这一字串包含特定异常的相关信息。

    归纳与总结

    依据对本讲多个示例程序的分析,请自行归纳总结出Java多层嵌套异常处理的基本流程。

    答:

    Java中异常分类:

    Throwable类有两个直接子类:

    Exception:出现的问题是可以被捕获的;

    Error:系统错误,通常由JVM处理。

    可捕获的异常又可以分为两类:

    (1)Check异常:直接派生自Exception的异常类,必须被捕获或再次声明抛出

    (2)Runtime异常:派生自RuntimeException的异常类。使用throw语句可以随时抛出这种异常对象:

       throw new ArithmeticException(…);

    处理流程:

    1.try语句嵌套从外层到内层执行,在try语句中,哪一层出错,哪一层就抛出异常,该层后边的try语句就不再执行,如果该层存在catch就进行相应的捕获,且内层try中嵌套的try-catch语句外部如果还有语句会继续执行;如果该层没有catch进行捕获,就向外抛出,如果外部try-catch语句中也没有catch进行捕获,就终止程序。

    2.try-catch-finally语句嵌套时,内层try抛出异常,即使catch没有捕捉到抛出的异常,内层的finally也一样会执行,然后异常继续向外抛出,除非遇到极特殊的System.exit(0)在finally语句之前的try-catch中,finally语句才不执行。

    是多疑还是去相信 谎言背后的忠心 或许是自己太执迷 命题游戏 沿着他的脚步 呼吸开始变得急促 就算看清了面目 设下埋伏 真相却居无定处 I swear I'll never be with the devil 用尽一生孤独 没有退路的路 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 沿着他的脚步 呼吸开始变得急促 就算看清了面目 设下埋伏 真相却居无定处 I swear I'll never be with the devil 用尽一生孤独 没有退路的路 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 你看不到我 眉眼焦灼却不明下落 命运的轮轴 伺机而动 来不及闪躲 黑夜和白昼 你争我夺 真相被蛊惑 心从不退缩 这天堂荒漠 留给孤独的猎手
  • 相关阅读:
    PDF,仅支持英译中,可以下载后的pdf或者word版
    pip指定源安装【自用】
    【jQuery01】jQuery选择器
    【jQuery00】什么是jQuery,为什么要学jQuery,配置jQuery环境,解决冲突,大致使用流程
    什么是召回率??
    编程学习路线
    堆排序
    二叉插入排序
    每天算法一丁点(4)--递归算法应用:分书问题
    每天算法一丁点(3)--递归算法应用:半数集
  • 原文地址:https://www.cnblogs.com/muailiulan/p/9941716.html
Copyright © 2011-2022 走看看