`
bolange
  • 浏览: 27081 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

异常那点事

    博客分类:
  • Java
JVM 
阅读更多
一、概述
在Java程序设计语言中,异常对象都是派生自java.lang.Throwable类的一个实例!所有派生于Error类或RuntimeException类的异常称为未检查(unchecked)异常,所有其他的异常称为已检查(checked)异常。
异常处理的方法有二种:1. 声明异常 2. 捕获异常

                  Throwable
                        |
                  ---------------
                  |             |
               Error   Exception
                                |
                         ---------------
                         |             |
                      Check      Runtime
                    Exception   Exception

二、声明异常
关键字: throws, throw
1. 已检查异常必须声明,未检查异常可声明也可不声明。
2. 如果在子类中覆盖了超类的一个方法,子类方法中声明的已检查异常(未检查异常可以不再声明)不能超过超类方法中声明的异常范围(也就是说,子类方法中抛出的异常范围更小,或者根本不抛出任何异常(此时为捕获了超类抛出的所有已检查异常))。
3. 如果超类方法中没有抛出任何已检查异常,子类也不能抛出任何已检查异常。
4. Java 编译器严格的执行throws说明符。如果调用了一个抛出已检查异常的方法,就必须对它进行处理,或者将它传递出去。

三、捕获异常
关键字:try, catch, finally

四、总结
  • 异常有两种形式:检验异常和非检验异常;
  • 检验异常包括Exception的所有子类型,但不包括扩展RuntimeException的类;
  • 检验异常遵守处理或声明它的规则,任何可能抛出检验异常的方法(包括调用能够抛出检验异常方法的方法),都必须使用throws关键字声明异常,或者用适当的try/catch处理异常;
  • Error或RuntimeException的子类型是非检验异常,因此,编译器不强迫要求处理或声明规则。你可以随意声明或处理它们,编译器对此并不关心;
  • 如果使用可选的finally块,则始终会调用它,不管在相应的try内是否有异常抛出,也不管抛出的异常是否被捕获;
  • “始终调用finally”这一规则的唯一例外是:如果JVM关闭,则不会调用finally块。如果从try或catch块调用System.exit(),则会发生这种情况;
  • 调用finally并不意味着它必然完成。finally块内的代码本身能够引发异常或者触发方法System.exit();
  • 未捕获的异常通过调用栈向后传播,它从抛出该异常的方法开始,到具有该异常类型相应catch的第一个方法为止,或者到JVM关闭为止[如果该异常到达main(),并且main()声明它“躲避”该异常时,则JVM会关闭];
  • 可以创建自己的异常,通常通过扩展Exception或其子类型之一创建。这些异常将被看作检验异常,编译器将对这些异常强制执行处理或声明规则;
  • 所有的catch块都必须按照从最具体到最通用的顺序排列。如果对于IOException和Exception有一个catch子句,则必须把针对IOException的catch放在代码的前面。否则,IOException将被catch(Exception e)捕获,因为catch参数能够捕获这一特定的异常或其任何子类型!编译器将禁止定义从来不能到达的catch子句;
  • 有些异常是由程序员创建的,有些则是由JVM创建的。
分享到:
评论

相关推荐

    剪不断理还乱Cortex-M4核的“异常”与“中断”那点事

    之前一直对MCU中的“异常”和“中断”这两个概念有点模糊,最近终于在这本书中找到了答案,欣喜之余,也把它记录了下来,同时本着share的思想,也开放给广大博友,共同进步。

    大厂面试专栏,冲击大厂必备

    第一篇:JAVA 基础那点破事!反射、泛型、IO模型、重载、非阻塞 第二篇:JAVA 集合那点破事!集合、扩容、数组、链表 第三篇:JAVA 并发!JUC、死锁、CAS、线程池 第四篇:JVM 那点破事!内存结构、垃圾收集、OOM、...

    优秀论文--10kV配电线路线损异常排查标准化流程.pdf

    电网线损,线损资料,线损论文--同期那点事,10kV配电线路线损异常排查标准化流程,优秀论文,电力行业,线损分析必备。

    如何应对常见的在线烧录异常情况

    在线烧录,顾名思义,直接在电路板上对芯片进行烧录,不依赖于烧录座,不受...每个产品的电路板各种各样,存在很多不确定因素,会给在线烧录带来异常情况。笔者把近期遇到的几种典型的情况,逐个解析,找到问题关键点。

    软件页面功能测试点小结

    软件页面功能测试点小结软件测试关键字:Web测试功能测试项目接近尾声了,现在似乎有点闲,随便找点事来做吧。在前人的基础下,结合自己的实践总结下功能测试的测试点。一、显示问题1、页面无乱码现象:在可以输入中...

    Maven将带有第三方依赖的可执行程序打包示例

    博客《Maven 项目打包需要注意到的那点事儿》可以告诉你解决这些问题的办法。 有没有一个示例?有,本资源就是。 本资源是为博客《Maven 项目打包需要注意到的那点事儿》示例项目,博客地址:...

    python网络爬虫基础那点事!

    python网络爬虫 ...1.Resquests库入门 1.get()方法:r=requests.get(url) ... r.text --url对应的页面内容 ... r.apparent_encoding --从内容中分析出的响应内容编码方式(备选编码方式) ...2.Requests的异常 reques

    田纳西伊斯曼数据集及PCA主元分析的MATLAB程序

    假设三维空间中有一系列点,这些点分布在一个过原点的斜面上,如果你用自然坐标系x,y,z这三个轴来表示这组数据的话,需要使用三个维度,而事实上,这些点的分布仅仅是在一个二维的平面上,那么,问题出在哪里?...

    聊一聊Asp.net过滤器Filter那一些事

    最近在整理优化.net代码时,发现几个很不友好的处理现象:登录判断、权限认证、日志记录、异常处理等通用操作,在项目中的action中到处都是。在代码优化上,这一点是很重要着力点。这时.net中的过滤器、拦截器...

    Quartz定时任务

    Quartz.Net是一个定时任务框架,可以实现异常灵活的定时任务,开发人员只要编写少量的代码就可以实现“每隔1小时执行”、“每天22点执行”、“每月18日的下午执行8次”等各种定时任务。 Quartz.Net中的概念:计划者...

    我整理的变电运维知识资料包

    36_嘿嘿,这回把互感器的那些事搞明白啦! 37_电力系统失灵及死区保护 38_讲透了断路器失灵保护及远方跳闸 39_拨云见日, 断路器控制回路详解 40_电压二次回路运维要求与故障处理 41_变压器停、送电操作步骤与注意...

    免费开源!!【高级Java后台开发面试指南】

    项目强化,至少与知识点的比例是五五开,所以必须针对简历中的两个以上的项目,形成包括【架构和实现细节】,【正常流程和异常流程的处理】,【难点+坑+复盘优化】三位一体的组合拳 压力练习,面试的时候难免紧张,...

    每个Python开发者必须知道的事:顶级编程技巧和最佳实践大公开!.zip

    内容关键词: 数据类型, 控制流, 函数, 类与对象, 模块, 异常处理, 文件操作, 并发编程, 异步编程, 代码格式化, 文档字符串, 类型注解, 单元测试, 版本控制 用途: 适用于初学者至中级开发者的技能提升...

    java面试宝典

    237、触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别。 56 238、EJB容器提供的服务 56 239、EJB的角色和三个对象 56 240、EJB的几种类型 56 241、bean 实例的生命周期 56 242、...

    数据分析数据挖掘的步骤.pdf

    根据挖掘⽬标和数据形式可以建⽴分类与预测、聚类分析、关联规则、事需模型和偏差检测等模型 【⽅法】 分类与预测 聚类分析 关联规则 时序模型 离群点检测 6、模型评估 【⽬的】在多个模型中找出⼀个最好的模型 根据...

    java8源码-mycuckoo:用户权限管理平台

    以精小完整的工程记录遇到的事, 学到的经, 收集点滴 此项是坚持, 初有萌芽, 接而立项, 后有执行, 过程曲折, 枯燥乏味, 需心静不变的坚持 此项是态度, 不畏事小, 不厌反复, 没有坚持不会有果 特性 通用三模块: ...

    论文研究 - 经皮冠状动脉介入治疗前患者饮食习惯信息的益处:3个月和6个月的随访

    使用Bonferroni校正的事后检验显示,入院患者在3个月至6个月的时间之间的平均TCHOL浓度存在统计学差异(209±67 mg / dl对174±34 mg / dl对176±36 mg / dl) ),分别为p = 0.005和p = 0.042。 但是,在3个月和6...

    daijie:提供基于spring-cloud系列整合的依赖jar包,再加入了分布式锁,分布式事务,接口文档,多数据源,单点登录,第三方集成等等可spring-boot配置的,简单化的使用工具

    提供基于spring-cloud系列整合的依赖jar包,比如分布式锁,接口文档,多数据源,单点登录,第三方集成等等可spring-boot配置的,简单化的使用工具。 本着一个学习的态度,可以是实现自己的一个想法,对我来说这是一...

    单片机与DSP中的基于VxWorks的油井数据采集远程终端的设计

    目前油井工作状态参数监控由于缺乏远程手段,对油井的生产状况均处于事后处理状态,油井出现异常或被盗破坏时不能及时处理,造成大量不明损失。基于CD-MA通迅信道的远程终端(Remote Terminal Unit,RTU)充分利用现有...

    DevOps:自动化运维指南 https

    如果中间内容对你有所帮助,可以帮我在 上点个 star ^v^ 目录 一、Let's Encrypt 证书自动颁发脚本 二、工具 三、Docker知识 一次构建多平台docker镜像 RedHat 开源企业镜像项目 Quay Docker 必修课程 Dockerfile ...

Global site tag (gtag.js) - Google Analytics