zoukankan      html  css  js  c++  java
  • Java异常类(Throwable)

    一、异常类体系

    这里写图片描述

    二、异常类由来与定义

    【异常类的由来】:Java把程序在运行时出现的各种不正常情况也看成了对象,
    提取属性和行为进行描述,比如异常名称,异常信息,异常发生位置,从而形成了各种异常类
    
    【定义】异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。
    

    三、严重的异常:错误(Error)

    此类异常:【一般不用处理】

    指JVM系统内部错误或资源耗尽等【严重情况】,属于JVM需要负担的责任
    

    特点

    这一类异常事件一般无法恢复或不可能捕获
    程序(员)不需要处理这类异常,因为是JVM的问题

    四、不严重的异常:异常(Exception)

    此类异常:【一般要处理】

    因编程错误或偶然的外在因素导致的【一般性问题】

    异常处理机制

    【抛出异常】:Java程序在执行过程中如果出现异常,会自动生成一个异常类对象,该异常对象将被自动提交给JVM,这个过程称为抛出(throw)异常
    【捕获异常】:当JVM接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常和处理异常。
    如果JVM找不到可以捕获异常的代码,则运行时系统将终止,相应的Java程序也将退出。
    这里写图片描述

    特点

        程序员通常可以处理
        这类异常得到恰当的处理时,程序有机会恢复至正常运行状况
    

    从处理的必要性角度分
    非受检(unchecked)异常(运行时)
    受检(checked)异常(非运行时)

    非受检(unchecked)异常(运行时)

    编译器不要求必须处理的异常
    一般是指编程时的逻辑错误,是程序员应该积极避免其出现的异常

    父类:java.lang.RuntimeException
    错误的类型转换:java.lang.ClassCastException
    数组下标越界:java.lang.ArrayIndexOutOfBoundsException
    空指针访问:java.lang.NullPointerException
    算术异常(除0溢出):java.lang.ArithmeticException

    受检(checked)异常(非运行时)

    编译器要求必须处理的异常
    在编译期间要对其可能出现的异常进行处理

    有如下这些类

    没有找到指定名称的类:java.lang.ClassNotFoundException
    访问不存在的文件:java.io.FileNotFoundException
    操作文件时发生的异常:java.io.IOException
    操作数据库时发生的异常:java.sql.SQLException

    异常处理两种方式
    1.捕获异常

    自己解决问题

    步骤
    一旦产生异常,则首先会产生一个异常类的对象
    在try语句中对此异常对象进行捕捉;
    产生的异常对象与catch语句中的各个异常类型进行匹配,如果匹配成功,则执行catch语句中的代码。

    使用的语句:try{}catch(){}catch(){}finally{}

    try 代码段包含的是可能产生异常的代码
    try 代码段后可以有0-多个catch代码段,再跟0-1个finally代码段
    每个catch代码段只声明一种其能处理的特定类型的异常,并提供处理的方法。
    当异常发生时,程序会中止当前的流程去执行相应的catch代码段。
    若存在finally,finally段的代码无论是否发生异常都执行,作用:

    关闭打开的文件
    删除临时文件
    关闭数据库的连接等

    只有发生异常的时候 才会执行catch语句
    使用多重 catch 语句时,异常子类一定要位于异常父类之前。
    getMessage() 方法,用来获得有关异常事件的字符串信息。
    printStackTrace() 方法,用来跟踪异常事件发生时执行堆栈的内容。

    2.抛出异常

    自己解决不了,让调用者来解决

    throw方法 抛出异常类

    产生异常抛出异常对象 方法内部 只能抛一个异常对象 不能直接抛出受检异常

    throws方法 抛出异常类

    方法名后面 可以同时抛多个异常类型 能够直接抛出受检异常

    throws使用格式:[修饰符] 返回值类型 方法名([形式参数列表]) [throws 异常类1,异常类2….]{}

    注意:
    1)如果throw 和 throws 连用,就一定会发生异常

    2)如果想抛出一个产生的受检异常对象

    throw new 异常对象
    通过throws在方法名后面 抛出

    自定义异常

    自定义受检异常:继承Exception是受检异常
    自定义非受检异常:继承 RuntimException 非受检异常

  • 相关阅读:
    javascript 中的暗物质 闭包
    关于使用 jBox 对话框的提交问题
    Orchard 的项目结构解决方案文件夹的原理与使用
    翻译:创建 Windows8 应用 Part I: Hello, world!
    翻译:FireBug 1.10 新特性
    SQL数据库设计经验
    我的女孩
    在WINDOWS下安装MRTG全攻略网络流量监控
    ASP实用函数库
    DIV CSS设计时IE6、IE7、FF 与兼容性有关的特性
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6797643.html
Copyright © 2011-2022 走看看