zoukankan      html  css  js  c++  java
  • 异常处理机制

    异常的概念:
      程序在运行时,发生了我们没有预测的情况,它阻止了程序按照我们预期效果执行!

    一.异常的处理机制:

       怎么才能让我们的代码执行完毕呢?

           使用java中的异常处理机制! 什么是异常处理机制呢? 能让程序在异常发生时,按照代码预先设定的异常处理逻辑,针对性地处理异常, 让程序恢复正常并继续执行。

    二.异常的分类和结构图:

    三.异常和异常链的使用:

    程序中的异常

    异常处理方式分为两种:(5个关键字)

    1.使用try..catch..finally

    2.使用throw抛出异常和throws声明异常

    try的使用:

    001.try块中放可能发生异常的代码;

    002.try不能单独使用,必须和catch或者finally中的其中一个联合使用;

    003.如果执行完try并且不发生异常,则接着去执行finally代码块和finally后面的代码; 如果没有finally代码块,则直接执行catch之后的代码;

    004.如果发生异常,则尝试去匹配对应异常的catch代码块。

    catch的使用:

    001.每一个catch块用于捕获并处理一个特定的异常,或者这异常类型的子类。

    如果try中没有出现这个类型或者子类的异常, 则无法捕获

    002.catch后面的括号定义了异常类型和异常参数。

    003.如果异常与之匹配且是最先匹配到的,则虚拟机将使用这个catch块来处理异常。

    004.可以书写多个catch代码块!顺序必须是按照异常类型从小到大!

    005.在catch块中可以使用异常参数来获取异常的相关信息。异常参数是这个catch块中的局部变量,其它块不能访问。

    006.如果当前try块中发生的异常在后续的所有catch中都没捕获到,则先去执行finally

    007.如果try中没有发生异常,则所有的catch块将被忽略。

    008.Java7中可以将多个异常声明在一个catch中,仅限于jdk7

    finally的使用

    001.无论异常是否发生,finally代码块都会执行;

    002.如果try代码块中出现return,先执行finally代码块之后return;

    003.遇到System.exit(int status),不会执行finally代码块 System.exit(0):正常退出 System.exit(1或者非0):非正常退出,一般放置在catch代码块中

    004.主要执行一些清理工作,比如关闭流,释放数据库连接资源......

    try..catch..finally综合注意点

    01.每个代码块中的变量都是局部变量,其他代码块不能访问;

    02.try不能单独使用,必须和catch或者finally联合使用;

    03.catch代码块可以有多个,书写顺序必须是按照异常类型的继承关系从小到大书写;

    04.如果try代码块中出现了return,也是先执行finally之后再执行return,最后结束当前方法。

    throw和throws的使用

    异常抛出的分类

    001.系统自动抛出异常 我们没有使用异常处理机制,系统默认遇到异常时,抛出的异常!

    002.书写语句抛出异常 使用throw抛出异常,throws声明异常

    throw的使用

    语法: throw new 异常类型([异常提示语句]);

    注意点:

    01.异常类型可以是Exception或者其子类;

    02.一条throw语句只能抛出一个异常;

    03.throw语句只能出现在方法体中

    04.针对于thorw抛出的异常,有两种解决方式 :

    001.使用try...catch...finally代码块处理异常 002.使用throws声明异常,把异常告诉调用者

    针对throw抛出异常的两种解决方案

     throws的作用

    语法: 方法名称 throws 异常类型1,异常类型2;

    注意点:

    01.throws声明在方法名称之后;

    02.throws可以声明多个异常类型,每个类型之间使用 '逗号' 隔开;

    03.throws声明表示当前方法可以不处理异常,而是由方法的调用者处理;

    04.如果在主函数中(main())使用throws声明异常,则由JVM处理异常!

    异常链的使用:

    什么是异常链?

      异常链是指将捕获的异常包装进一个新的异常中,新异常中记录了原始异常的信息。并重新抛出的异常处理方式。

    丢失根本异常的场景

    打印异常栈错误信息

    使用异常链解决丢失根异常的问题

     使用异常链之后打印的异常栈信息。

     

    04.自定义异常类:

      所谓自定义异常,通常就是定义一个类,去继承Exception类或者它的子类。因为异常必须直接或者间接地继承自Exception类。

    示例:

    public  class  MyException  extends  RuntimeException{
           
         public MyException(String message)
            super(message);    //用于保存异常的提示信息
      }
    public MyException(String message, Throwable cause) { super(message, cause); //用于保存根异常的信息 } }

    自定义异常的的注意事项:

    1.异常类必须是Throwable的子类

    2.定义受查异常,建议继承Exception

    3.定义运行异常,建议继承RuntimeException

    异常的使用原则:

    1.异常只能用于非正常情况

    2.为异常提供说明文档

    3.尽可能的避免异常,特别是运行时异常

    4.保持异常的原子性

    5.避免过于庞大的try代码块

    6.在catch中指定具体的异常类型

    7.不要在catch块中忽略捕获的异常

      

  • 相关阅读:
    Qt 学习 之 二进制文件读写
    QT学习 之 文本文件读写
    Qt学习 之 文件
    QT学习 之 三维饼图绘制
    Haskell 笔记(四)函数系统
    QT学习 之 事件与事件过滤器(分为五个层次)
    Qt学习 之 数据库(支持10种数据库)
    Qt5制作鼠标悬停显示Hint的ToolTip
    【码云周刊第 32 期】程序员眼中的 Vue 与 Angular !
    Qt学习 之 多线程程序设计(QT通过三种形式提供了对线程的支持)
  • 原文地址:https://www.cnblogs.com/wqtzhaoqiang/p/7699114.html
Copyright © 2011-2022 走看看