zoukankan      html  css  js  c++  java
  • JavaSE基础入门_013_异常

    异常

    异常的概念

    • 概念:程序在运行过程中出现的不正常现象。出现异常不处理将终止程序运行。

     

    • 异常处理的必要性:任何程序都可能存在大量的未知问题、错误;如果不对这些问题进行正确处理,则可能导致程序的中断,造成不必要的损失。

     

    • 异常处理:Java编程语言使用异常处理机制为程序提供了异常处理的能力。

     

    异常的分类

    • Throwable:可抛出的,一切错误或异常的父类,位于 java.lang 包中。

      • 错误【Error】: JVM、硬件、执行逻辑错误,不能手动处理。

      • 异常【Exception】:程序在运行和配置中产生的问题,可处理。程序员可干预。

        • RuntimeException:运行时异常,可处理,可不处理。

        • CheckedException:检查时异常,必须处理。

     

    常见运行时异常

    类型说明
    NullPointerException 空指针异常
    ArrayIndexOutOfBoundsException 数组越界异常
    ClassCastException 类型转换异常
    NumberFormatException 数字格式化异常
    ArithmeticException 算术异常

     

    异常的产生

    • 当程序在运行时遇到不符合规范的代码或结果时,会产生异常或程序员使用throw关键字手动抛出异常。

     

    异常的传递

    • 异常的传递: 按照方法的调用链反向传递, 如始终没有处理异常, 最终会由 JVM 进行默认异常处理 ( 打印堆栈跟踪信息 ).

     

    异常的处理

    • Java的异常处理是通过5个关键字来实现的:

     

    • — try:执行可能产生异常的代码。

    • —catch:捕获异常,并处理。

    • —finally:无论是否发生异常,代码总能执行。

    • —throw:手动抛出异常。

    • —throws:声明方法可能要抛出的各种异常。

     

    异常处理 try ... catch

    try {
    //可能出现异常的代码
    } catch (Exception e) {
    // 异常处理的相关代码,如:getMessage()、printStackTrace()
    }
    • 会有三种情况:

      1. 正常请求,无异常

      2. 出现异常并处理,发生异常并成功捕获

      3. 异常类型不匹配,发生异常不能捕获【catch 指定的异常类型不匹配】

    异常处理 try ... catch ... finally

    try {
    //可能出现异常的代码
    } catch (Exception e) {
    // 异常处理的相关代码,如:getMessage()、printStackTrace()
    } finally{
      // 是否发生异常都会执行,可以释放资源等...
    }
    1. finally 块是否发生异常都执行,可以释放资源

    2. finally 块不执行的唯一情况,finally之前退出 java 虚拟机

     

    异常处理 多重catch

    try {
    //可能出现异常的代码
    } catch (异常类型1) {
    //满足异常类型1执行的相关代码
    } catch (异常类型2) {
    //满足异常类型2执行的相关代码
    } catch (异常类型3) {
    //满足异常类型3执行的相关代码
    }
    • 子类异常在前,父类异常在后。

    • 发生异常时按顺序逐个匹配。

    • 只执行第一个与异常类型匹配的catch语句。

    • finally根据需要可写或不写。

    • 遵循从子(小)到父(大)的顺序,父类异常在最后。

     

    异常处理 try...finally

    • try...finally不能捕获异常,仅仅用来当发生异常时,用来释放资源。

    • 一般用在底层代码,只释放资源不做异常处理,把异常向上抛出。

    • try{
      //可能出现异常的代码
      }finally{
         //是否发生异常都会执行,可以释放资源等...
      }

     

    声明异常

    • 如果在一个方法体中抛出了异常,如何通知调用者?

    • throws关键字:声明异常

    • 使用原则:底层代码向上声明或者抛出异常,最上层一定要处理异常,否则程序中断。

     

    抛出异常

    • 除了系统自动抛出异常外,有些问题需要程序员自行抛出异常。

    • throw 关键字:抛出异常

    • 语法:

      • throw 异常对象;//已经存在的异常对象
        throw new RuntimeExecption( "异常信息" );

     

    自定义异常

    • 需继承自 Exception 或 Exception 的子类,常用 RuntimeException 。

    • 必要提供的构造方法:

      • 无参构造方法

      • String message 参数的构造方法

     

    方法覆盖(重写)

    • 带有异常声明的方法覆盖:

      • 方法名、参数列表、返回值类型必须和父类相同。

      • 子类的访问修饰符和父类一致或比父类更宽

      • 子类中的方法,不能抛出比父类更多、更宽的检查时异常。

     

    总结

    • 异常的概念:

      • 程序在运行过程中出现的特殊情况。

    • 异常的分类:

      • RuntimeException:运行时异常,可处理,可不处理。

      • CheckedException:检查时异常,必须处理。

    • 异常的产生:

      • 程序遇到错误,或手动抛出异常

    • 异常的传递:

      • 按照方法的调用链反向传递,如始终没有处理异常,最终会由 JVM 进行默认异常处理(打印堆栈跟踪信息)。

    • 异常的处理:

      •     try {

        } catch (Exception e) {

        }finally {
          }
    • 带有异常声明的方法覆盖:

      • 子类中的方法,不能抛出比父类更多、更宽的异常。

  • 相关阅读:
    css 伪类
    tornado 作业 简单首页 登录页 个人中心
    tornado 作业 自定义模板 UIMethod以UIModule
    tornado 网页提交内容 展示内容作业
    tornado
    javascript
    廖雪峰官网学习js 数组
    廖雪峰官网学习js 字符串
    廖雪峰官网学习js 数据类型和变量
    协程gevent学习
  • 原文地址:https://www.cnblogs.com/77-is-here/p/13045772.html
Copyright © 2011-2022 走看看