异常的几种处理方式_try 里面抛出了异常,catch 里面如何-程序员宅基地

技术标签: 技术栈  工作总结  异常  

目录

异常的声明

异常的处理

java虚拟机默认处理异常(默认处理方式)

手动处理异常的方式

异常的捕获


异常的声明

如果在某个方法中出现了编译时异常可以在当前方法上声明这个异常的类型,声明之后编译时异常就会消失

  • 注意

    • 异常的声明不能从根本上解决问题

    • 声明一个编译时异常类型之后,系统不会在编译期间检查这段代码,但是在运行阶段,如果传入的数据不正确,也有可能出现错误情况

    • 异常的声明只能处理编译时异常

异常的处理

java虚拟机默认处理异常(默认处理方式)

  • step1-->如果在代码中某个方法内出现了错误情况,系统就会把这个错误发生的原因,发生异常的类型,发生的路径封装到异常对象中

  • step2-->如果当前方法中没有处理这个异常对象,就将异常往上抛,抛给调用该方法的方法

  • step3-->如果调用方法也没有处理异常,那么久一层层往上抛出,直到抛给main方法再抛给虚拟机

  • step4-->虚拟机将当前异常对象通过标准错误流,打印到控制台,并结束自己

手动处理异常的方式

  • try...catch

    try{ 可能出现错误的代码 }catch(异常类型 异常对象名){ 处理异常的方式 }

    • step1-->先执行try中的代码,检测是否出现异常

    • step2-->如果try中的代码没有出现问题,try...catch直接结束,代码正常执行try...catch后面的代码

    • step3-->如果try中出现了异常,程序立即跳转到catch中查看出现异常所属类型和catch中声明的类型是否一样,如果一样,就捕获该异常按照指定的方式去处理异常,处理之后try...catch结束,程序继续运行

    • step4-->如果try中出现了catch中没有声明的异常类型,就不能捕获该异常,此时虚拟机来处理这个异常(默认处理方式)

    • 注意事项

      • 如果在某行代码中,出现了异常,立即去catch块中匹配异常类型,出现错误的代码后面的代码就不能执行了

  • try...catch...catch...

    try{ 可能出现错误的代码 }catch(异常类型1 对象名1){ 异常1的处理方式 }catch(异常类型2 对象名2){ 异常2的处理方式 }...

    • step1-->先执行try中的代码,检测是否出现异常

    • step2-->如果出现了异常,就先和异常类型1匹配,如果能匹配上就执行异常1的处理方式,处理之后,直接结束整个try...catch语句,执行之外的代码

    • step3-->如果不能和异常类型1匹配,就继续和异常类型2匹配,如果能匹配上,就执行异常类型2的处理方式,之后结束整个try...catch语句,执行之外的代码

    • step4-->如果异常类型2不能匹配,依次类推,往后匹配

    • step5-->如果出现的异常,catch中的类型都不能匹配,虚拟机默认处理

    • 注意事项

      • 如果给定了多个catch语句去匹配多个异常类型,异常类型中存在子父类的关系,腹肌的异常类型不能1定义在子级异常类型前面

        • 原因

          • 如果父类异常定义在前面,后面定义的子类或者简介子类异常没有执行的机会,可以将父类异常类型定义在后面,如果前面的类型无法匹配,可以使用父类异常匹配

      • 如果多个异常类型想要执行一种处理方式,可以使用 | 符号去定义类型(jdk1.7),可以使用多个 | 来定义多个异常类型,只要出现一种,都可以去捕获处理

  • try...catch...finally

    try{ 可能会发生错误的代码 }catch(异常类型 异常对象名){ 异常的处理方式 }finally{ 一定要执行的代码 }

    • step1-->先执行try中的代码,检测是否出现异常

    • step2-->如果出现异常就先和异常类型匹配,如果能匹配上就执行异常的处理方式,处理之后结束整个try...catch语句,执行之外的代码

    • step3-->如果不能和异常类型,不结束整个try...catch,强制执行finally代码块中的代码,然后再结束

    • 使用原因

      • 有些代码一定要执行,将代码放在try中或者catch中或者terycatch外都有可能执行不到

      • 将这段代码放在finally块中,不管遇到什么情况,系统都会去执行finally中的代码

  • try...finally

    • step1-->执行第一段代码

    • step-->执行第二段代码

    • 作用

      • 如果在程序中,有多段代码,多段代码都需要有执行的机会,name可以将这多段代码,分别放在try中和finally中,这样,多段代码之间就会互不影响,都有执行的机会,finally用来分隔代码,让代码之间互不影响,都有执行的机会

异常的捕获

  • 如果代码的某个位置出现了错误情况,可以使用特定的格式,捕获这个错误,捕获之后可以按照自己定义的方式去处理异常

  • 注意

    • 异常的捕获即可以处理编译时异常,也可以处理运行时异常

    • 可以从根本上解决问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_40629687/article/details/119850678

智能推荐

前端开发之vue-grid-layout的使用和实例-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏34次。vue-grid-layout的使用、实例、遇到的问题和解决方案_vue-grid-layout

Power Apps-上传附件控件_powerapps点击按钮上传附件-程序员宅基地

文章浏览阅读218次。然后连接一个数据源,就会在下面自动产生一个添加附件的组件。把这个控件复制粘贴到页面里,就可以单独使用来上传了。插入一个“编辑”窗体。_powerapps点击按钮上传附件

C++ 面向对象(Object-Oriented)的特征 & 构造函数& 析构函数_"object(cnofd[\"ofdrender\"])十条"-程序员宅基地

文章浏览阅读264次。(1) Abstraction (抽象)(2) Polymorphism (多态)(3) Inheritance (继承)(4) Encapsulation (封装)_"object(cnofd[\"ofdrender\"])十条"

修改node_modules源码,并保存,使用patch-package打补丁,git提交代码后,所有人可以用到修改后的_修改 node_modules-程序员宅基地

文章浏览阅读133次。删除node_modules,重新npm install看是否成功。在 package.json 文件中的 scripts 中加入。修改你的第三方库的bug等。然后目录会多出一个目录文件。_修改 node_modules

【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure-程序员宅基地

文章浏览阅读883次。【代码】【】kali--password:su的 Authentication failure问题,&sudo passwd root输入密码时Sorry, try again._password: su: authentication failure

整理5个优秀的微信小程序开源项目_微信小程序开源模板-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏97次。整理5个优秀的微信小程序开源项目。收集了微信小程序开发过程中会使用到的资料、问题以及第三方组件库。_微信小程序开源模板

随便推点

Centos7最简搭建NFS服务器_centos7 搭建nfs server-程序员宅基地

文章浏览阅读128次。Centos7最简搭建NFS服务器_centos7 搭建nfs server

Springboot整合Mybatis-Plus使用总结(mybatis 坑补充)_mybaitis-plus ruledataobjectattributemapper' and '-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏3次。前言mybatis在持久层框架中还是比较火的,一般项目都是基于ssm。虽然mybatis可以直接在xml中通过SQL语句操作数据库,很是灵活。但正其操作都要通过SQL语句进行,就必须写大量的xml文件,很是麻烦。mybatis-plus就很好的解决了这个问题。..._mybaitis-plus ruledataobjectattributemapper' and 'com.picc.rule.management.d

EECE 1080C / Programming for ECESummer 2022 Laboratory 4: Global Functions Practice_eece1080c-程序员宅基地

文章浏览阅读325次。EECE 1080C / Programming for ECESummer 2022Laboratory 4: Global Functions PracticePlagiarism will not be tolerated:Topics covered:function creation and call statements (emphasis on global functions)Objective:To practice program development b_eece1080c

洛谷p4777 【模板】扩展中国剩余定理-程序员宅基地

文章浏览阅读53次。被同机房早就1年前就学过的东西我现在才学,wtcl。设要求的数为\(x\)。设当前处理到第\(k\)个同余式,设\(M = LCM ^ {k - 1} _ {i - 1}\) ,前\(k - 1\)个的通解就是\(x + i * M\)。那么其实第\(k\)个来说,其实就是求一个\(y\)使得\(x + y * M ≡ a_k(mod b_k)\)转化一下就是\(y * M ...

android 退出应用没有走ondestory方法,[Android基础论]为何Activity退出之后,系统没有调用onDestroy方法?...-程序员宅基地

文章浏览阅读1.3k次。首先,问题是如何出现的?晚上复查代码,发现一个activity没有调用自己的ondestroy方法我表示非常的费解,于是我检查了下代码。发现再finish代码之后接了如下代码finish();System.exit(0);//这就是罪魁祸首为什么这样写会出现问题System.exit(0);////看一下函数的原型public static void exit (int code)//Added ..._android 手动杀死app,activity不执行ondestroy

SylixOS快问快答_select函数 导致堆栈溢出 sylixos-程序员宅基地

文章浏览阅读894次。Q: SylixOS 版权是什么形式, 是否分为<开发版税>和<运行时版税>.A: SylixOS 是开源并免费的操作系统, 支持 BSD/GPL 协议(GPL 版本暂未确定). 没有任何的运行时版税. 您可以用她来做任何 您喜欢做的项目. 也可以修改 SylixOS 的源代码, 不需要支付任何费用. 当然笔者希望您可以将使用 SylixOS 开发的项目 (不需要开源)或对 SylixOS 源码的修改及时告知笔者.需要指出: SylixOS 本身仅是笔者用来提升自己水平而开发的_select函数 导致堆栈溢出 sylixos

推荐文章

热门文章

相关标签