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

    运行AboutException.java示例,然后通过后面的几页PPT了解Java中实现异常处理的基础知识。

    运行结果:

     

    Java中的异常捕获语句

    Try{

    //可能发生运行错误的代码;

    }

    catch(异常类型     异常对象引用){

    //用于处理异常的代码

    }

    finally{

    //用于“善后” 的代码

    }

    把可能会发生错误的代码放进try语句块中。

    当程序检测到出现了一个错误时会抛出一个异常对象。异常处理代码会捕获并处理这个错误。

    catch语句块中的代码用于处理错误。

    当异常发生时,程序控制流程由try语句块跳转到catch语句块。

    不管是否有异常发生,finally语句块中的语句始终保证被执行。

    如果没有提供合适的异常处理代码,JVM将会结束掉整个应用程序。

    Java中的异常分类

    Throwable类有两个直接子类:

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

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

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

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

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

       throw new ArithmeticException();

    请尝试解释以下奇怪的现象!

     

     

     

    前页PPT中所出现之奇怪现象,可以使用javap去反汇编两个示例程序的.class文件(一个是AboutException.class,另一个是ThrowDemo.class),从中你会有所发现的。

     

     

    finally”的功用

    资源泄露:当一个资源不再被某应用程序使用,但此程序并未向系统声明不再使用此资源时发生这种情况

    finally语句块主要用于解决资源泄露问题,它位于catch语句块之后,JVM保证它们一定执行。

    注意:finally语句块中也可能发生异常,如果这种情况发生,先前的异常被放弃。

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

     

    结果:

     

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

     

    结果:

     

    当有多个嵌套的trycatchfinally时,要特别注意finally的执行时机。

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

    特别注意:

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

    结果:

     

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

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

    不会,如果在catch语句,或者try语句中执行了System.exit(0)语句则直接退出程序

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

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

    printStackTrace:打印方法调用堆栈。

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

    异常的总结:

    java异常分为异常和错误,Exception和Error,两个类,者这两个类都继承自Throwable类,Throwable是所有java异常的根。

    java所有的异常类包括Throwable,Exception,Error都是类,所以都是可以实例化的(笔试经常会遇到)

    Error:不能被程序很好处理的错误(cannot be handled reasonably by program)

    机器的内存不够了

    JVM崩溃了(是程序都有可能挂掉)

    线程挂掉了

    Exception:可以被程序处理的(can be handled by program)

    IO错误(键盘,磁盘)

    网络错误

    不合法的类型转换

    数组或者容器越界

    java的异常一般会分为运行时异常和非运行时异常

    运行时异常就是RunTimeException的所有子类

    非运行时异常就是Exception的其他所有孩子类,比如IOException,InterruptedException

    Java中关于异常的类主要在java.lang.*;java.io.*;

  • 相关阅读:
    Quartz任务调度系统,克隆表达式
    Java故障分析基础
    SpringData JPA整理
    Mockito教程
    SpringMVC单元测试-MockMvc
    SpringBoot Actuator & SpringBoot Admin
    Swagger
    Spring @AliasFor
    java命令查询属性信息
    windows版本免安装redis, nginx, zookeeper
  • 原文地址:https://www.cnblogs.com/wj1998/p/7846761.html
Copyright © 2011-2022 走看看