• 【Java学习】异常



    前言

    在Java中,引入了异常的概念,以异常类的形式对一些非正常情况进行封装,通过异常处理机制对程序运行时发生的各种问题进行处理。

    正文

    Java中的异常类大部分继承自 java.lang.Throwable 类。下面介绍下 Throwable 类的继承体系:

    (一)Throwable 类的继承体系

    Throwable 体系架构图

    1.子类——Error类

    错误类。它表示Java运行时产生的系统内部错误或资源好近的错误,比较严重,仅靠修改程序本身无法恢复执行。

    2.子类——ExceptIon类

    异常类。它表示程序本身可以处理的错误,在开发Java程序中进行的异常处理,都是针对Exception类及其子类。
    (除了RuntimeException类,Exception类下所有其他子类都用于表示编译时异常)

    3.常用方法

    方法声明功能描述
    String getMessage()返回此 throwable 的详细消息字符串
    void printStackTrace()将此 throwable 及其追踪输出到标准错误流
    void printStackTrace(PrintStream s)将此 throwable 及其追踪输出到指定的输出流

    (二)try…catch 和 finally

    1.异常捕获

    由于发生了异常,程序立即终止,无法继续向下执行;为了解决这样的问题,Java中提供了一种处理异常的方式,称为异常捕获。通常用 try…catch 语句。

    Try { 代码逻辑 } catch ( Exception e ) { 异常处理逻辑 }
    
    Try { 代码逻辑 } catch ( 具体的异常Exception e ) { 异常处理逻辑 } catch ( 具体的异常 )
    

    说明

    • 在 try 代码块中编写肯发生异常的语句;
    • 在 catch 代码块中编写针对异常处理的代码;
    • 当 try 代码块中的程序发生了异常,系统会将这个异常的信息封装成一个异常对象,并将这个对象传递给 catch 代码块。catch 代码块需要一个参数指明它所能接收的异常类型,这个参数的类型必须是 Exception 类及其子类.

    注意

    • 在 try代码块中,发生异常语句后面的代码不会被执行。( finally 中的代码仍会执行)
    • finally 中的代码块有一种情况不会执行:在 try…catch 中执行了 System.exit(0) 语句。
    • 当使用多重的catch时,一定要注意相关异常的顺序,将子类放在最前面的catch,父类放在后面的catch。

    System.exit(0): 表示退出当前的 Java虚拟机,虚拟机停止后任何代码都不会再执行。

    执行过程中可能存在的情况:

    • 正常执行,只执行try中的代码
    • 遇到异常,会处理try中异常代码之前的逻辑,后面的逻辑不会执行,最后会执行catch中的代码
    • 使用多重catch时,会遇到异常子类不匹配的情况,此时依然会报错,因此建议在catch的最后将所有的异常的父类写上

    2.throws 关键字

    语法

    修饰符 返回值类型 方法名([参数1,参数2]) throws ExceptionType1[,ExceptionType2…]{
    }
    

    (三)常见异常类型

    异常类型说明
    Exception异常层次结构的父类
    ArithmeticException算数错误 如:0作除数
    ArrayIndexOutOfBoundsException数组下标越界
    NullPointerException尝试访问null对象成员
    ClassNotFoundException不能加载所需的类
    IIIegalArgumentException方法接收到非法参数
    ClassCastException对象强制类型转换出错
    NumberFormatException数字格式转换异常 如:将"abc"转换为数字

    结语

    以上就是异常的介绍啦,感谢阅读~

  • 相关阅读:
    Web框架高级功能之模板、拦截器、Json、打包
    前端技术发展史、Nodejs语法
    子集树与排列树
    Web开发---路由实现
    JS, Jquery进行前台翻页
    Jquery将Ajax返回的Response添加到table中
    显示字符太长??来隐藏
    关于code 上server的证书的问题
    关于Ajax call get and post method, 和前端解决跨域
    2017-05-03与03May2017之间的转化
  • 原文地址:https://www.cnblogs.com/txge/p/13973578.html
Copyright © 2020-2023  润新知