zoukankan      html  css  js  c++  java
  • 一、异常


    1、概念
    程序在编译运行的过程中遇到的种种不正常的现象
    Java中所有的异常都是Throwable类的子类,Throwable类主要描述了各种不同的异常,因此,Java中的每个异常都是对象

    2、分类
    Throwable类:所有错误或者所有异常的父类,有两个子类:
    Error:大多数的错误与代码编写者无关,表示JVM层面的问题
    Exception:程序能够捕获并且解决的问题
    CheckedException:编译时异常,程序在编译时出现异常,这种异常必须处理,否则程序没有执行的寄回
    RuntimeException: 运行时异常,程序编译可以通过,但是运行的过程中出现异常


    3.处理异常的方法
    在Java中,处理异常的机制:捕获,抛出异常

    1>捕获异常
    语法:
    try{
    //可能存在异常的代码
    }
    catch(异常的种类){
    //异常的信息
    }
    finally{

    }

    在try块中遇到了异常,代码将不会继续向下执行,所以每次只能捕获一个异常
    一个try后面可以有多个catch块
    如果catch中的异常类型直接没有继承关系,则catch块的顺序没有要求,但是有继承关系,则子类必须在前,父类在后

    finally块写在try-catch的最后,表示不管try中的代码不会产生异常,或者某个catch会不会被执行。
    finally块都会被执行
    执行顺序:try-catch-finally

    finally只要用于流中,用于关闭流,为了释放与当前流有关的资源
    特殊情况:如果在try或者catch中出席那了return语句,finally依旧会被执行
    catch块结束之后,方法执行之前 finally块执行

    特殊用法:在finally中嵌套try-catch-finally 主要用于流中

    7、返回异常 获取异常的原因
    对象的错误跟踪信息输出到错误的输出流

    e.printStackTrace();
    返回异常的错误信息
    System.out.println(e.getMessage());

    扩展:finally不会被执行的情况
    a、在前面的代码中出现了System.exit()退出程序
    b、程序所在的线程死亡【stop()】
    c、cpu关闭

    扩展二:注意问题
    a、如果一个程序中有多个异常,可以直接用一个catch,类型直接使员工Exception
    b、try-catch-finally三个关键字都不能单独使用
    c、一个变量如果想要在try,catch或者finally中都能访问到的话,只能定义在语句外

    总结:
    a、try中语句没有异常:try中语句会依次执行,程序会直接跳过catch语句,执行finally中的语句
    b、try中出现异常,但是异常没有被处理【没有匹配到对应的catch块】,则这个异常最终给了JVM处理,finally块中的代码依旧会执行
    c、try中出现了异常,并且匹配到了对应的catch块,try-catch-finally

    try-catch就是把异常屏蔽了没有真正的解决


    2>抛出异常
    throw:抛出一个异常对象,调用这异常所在的方法的时候则会遇到异常
    throws:定义在方法的声明部分,用来表示一种可能性【当前方法有可能存在异常】
    throw和throws并不是必须成对出现
    如果抛出的是编译时异常,throws必须要写
    如果抛出的是运行是异常,throws必须要写

    throws可以单独使用

    注意:
    a、throws必须出现方法的声明部分,throw出现在方法体
    b、throws只表示一种可能性,并不一定发生异常,throw则是直接抛出异常,执行到了throw则一定抛出了某个异常对象
    c、throws和throw都是一种消极的处理问题的方式,所以异常不会真正被处理的

    3>自定义异常
    当系统的异常不能解决某些问题,需要自定义异常
    就是对于throw关键字的应用

    实现方式:
    继承自Exception,是编译时异常【运行时异常提前到编译时】
    继承自RuntimeException,是运行时异常

  • 相关阅读:
    逆序对
    归并排序
    快速排序
    利用WPF InkCanvas水墨控件圈选移动笔画
    Vue使用websocket进行心跳连接
    socket + vue + canvas实践,你画我猜(一)
    Vue+WebSocket+ES6+Canvas 制作【你画我猜】小游戏
    HTML5 canvas实现画板功能
    Canvas手工作图并实时同步复现(利用websocket)
    什么是SoC?
  • 原文地址:https://www.cnblogs.com/lsp-lsp/p/7344004.html
Copyright © 2011-2022 走看看