异常

作者: 崽子猪 | 来源:发表于2019-05-26 11:29 被阅读0次

一、异常体系

什么是异常?

异常就是程序中的一些错误,但并不是所有的错误都是异常

例如:输入了非法程序/打开了不存在的文件/网络通信时连接中断/JVM内存溢出/OOM等

这些异常大多数是我们开发人员出错误所引起的,还有一部分错误是我们程序本身引起的

异常分类

    1.error(错误) / Exception(异常)

     error:表示我们程序当中无法处理的错误( OOM / 线程写成死亡导致的错误) 一般发生error错误的时候,JVM虚拟机会选择线程终止

     Exception的(运行时异常/非运行时异常):表示程序本身可以处理的异常

    2.运行时异常和非运行时异常

        运行时异常:大多数分为RunTimeException以及它的子类(空指针异常/数组下标越界异常) 这些异常是不检查的异常,可以选择try/catch 也可以选择不处理

        非运行时异常:除了我们运行时异常以外的异常都是非运行时异常(IOException/SQLException/自定义的一些Exception.从程序语法角度上说是必须处理的异常.如果不处理程序是编译不通过的. 

    在Java当中我们是把异常当作对象来处理的,定义了一个基类,是所有异常的超类.

二、异常使用    

       1.运用Java异常处理机制

            1)try....catch语句(表示在try代码块中抛出异常之后,立即会转到catch代码块中执行或者退到栈的上一次代码中去寻找catch代码块)

            2)finally语句:任何情况下都必须执行的代码(由于异常会强制中断正常流程. finally语句的执行都是在try....catch语句后面,这样也保证了这样的操作会被执行.[缺点:由于finally和try...catch代码块是相互孤立开的,所以程序结构比较松散,可读性比较差,影响程序的建造性])

            3)throws子句:声明可能会出现的异常(只能在方法声明处)

            4)throw语句:抛出异常(可以在各个地方都可以抛出异常)

       2.异常处理的原理

            1)Java虚拟机用方法调用栈(method invovation)来跟踪每个线程中一系列的方法调用过程.

            2)如果执行方法中抛出异常,则Java虚拟机必须找到能捕获该异常的catch代码块

            3)当Java虚拟机追溯刀调用栈的底部方法时,如果仍然没有找到处理该异常的代码块

       3.异常流程的运行过程

1)finally语句不被执行的唯一情况就是先执行了用于终止程序的System.exit()方法

2)return语句用于退出本方法

3)finally代码块虽然在return语句之前就被执行但是变量修改不会影响我们的返回值

4)建议不要再finally代码块中使用return语句


第一种场景代码
第二种场景代码 第三种场景代码
第四种场景代码

三、一些异常得面试题

1.Java中的检查异常和非检查异常有什么区别?

      可检查异常:经编译器验证,对于声明抛出异常的方法.编译器将强制执行处理并声明规则.

      非检查异常(error):不遵循处理和声明规则.在产生子类异常时,不一定要采取任何适当操作.编译器不会去走是否解决了这样的异常

2.throw 和 throws 这两个关键字在java中有什么不同?

throw:总是出现在函数体内.在程序运行中抛出的一个拒绝的异常Expection,它抛出的Expection需要我们的代码人员来捕获处理

throws:总是出现在函数头当中.声明方法抛出的所有异常表示这个方法不能处理所有通过sevrice这个方法来抛出异常

3.如果执行finall代码块之前方法放回了结果,或者JVM退出了,finally块中俄代码还会执行吗?

1)在try代码块之外异常或者放回不是执行finally代码块的

2)在执行try代码块时退出JVM虚拟机

3)在子线程中执行try代码块时突然退出线程

4.Java中final,finalize,finally关键字的区别?

    final:被修饰的类,不能被继承,方法不能重写,变量变成常量,

    finally:用于异常处理,执行清除操作。

    finanlize:在垃圾收集器删除,对象之前调用此方法

相关文章

  • 异常和模块

    异常 目标 了解异常 捕获异常 异常的else 异常finally 异常的传递 自定义异常 一. 了解异常 当检测...

  • python多线程

    异常基础知识 -异常简介: 运行时错误 -异常类: 异常数据 异常名称,异常数据,异常类型 -自定义异常 clas...

  • dart 异常

    dart中的异常 异常处理 抛出异常 异常捕获

  • Java基础之异常

    Java基础之异常 目录 异常简单介绍 ThrowableErrorException 异常分类 如何处理异常异常...

  • python核心编程-错误与异常

    本章主题:什么是异常Python中的异常探测和处理异常上下文管理引发异常断言标准异常创建异常相关模块 什么是异常 ...

  • motan(RPC)系统梳理知识点

    异常分类: 业务异常(bizException) 服务异常(serviceException) 框架异常(fram...

  • 异常

    Java异常体系 异常的分类 Java的异常分为两大类:Checked异常和Runtime异常(运行时异常)。所有...

  • 从零构架个人博客网站(二)-全局异常处理

    中间件的异常 全局异常中间件全局异常监听定义异常的返回结果定义常见的异常状态开发环境 异常查看 对于异常,我们可以...

  • Node.js异常处理

    Node.js异常分类: 变量异常 函数异常 调用异常 变量异常 未定义变量 未包含对象 变量类型错误 函数异常 ...

  • python 异常

    异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释...

网友评论

      本文标题:异常

      本文链接:https://www.haomeiwen.com/subject/qylxtctx.html