异常的几种处理方式_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

智能推荐

爬虫 — 爬取携程的航班信息_爬虫 携程 机票-程序员宅基地

文章浏览阅读1.3w次,点赞5次,收藏57次。功能介绍:输入起点、终点、时间就能得到携程上的航班信息代码:from prettytable import PrettyTableimport requestsimport jsondef xiecheng(dcity,acity,date): date = date[0:4]+'-'+date[4:6]+'-'+date[6:8] headers = { "User-A..._爬虫 携程 机票

QT不同线程间signal-slot机制的值传递_qt connect 两个线程,signal 带两个int参数,slots函数带两个int参数-程序员宅基地

文章浏览阅读1.1k次。QT不同线程间signal-slot机制的值传递signal-slot机制是QT核心,也是QT解决线程之间通信的一大亮点。深刻理解其两大特性:(1)loosely coupledsender与receiver互不关心,一个signal可以被多个slot获取,signal可以触发另一个signal。(2)type-safeconnect连接时,遵守严格的参数约定,slot参数必须..._qt connect 两个线程,signal 带两个int参数,slots函数带两个int参数

huggingface使用(一):AutoTokenizer(通用)、BertTokenizer(基于Bert)-程序员宅基地

文章浏览阅读3w次,点赞18次,收藏64次。AutoTokenizer是又一层的封装,避免了自己写attention_mask以及token_type_idsimport transformersimport configorigin_tokenizer = transformers.BertTokenizer.from_pretrained(config.pretrained_model_path)auto_tokenizer = transformers.AutoTokenizer.from_pretrained(config.pret_autotokenizer

R中的数据抽样SMOTE (谢佳标老师讲课笔记)_r语言smote算法代码-程序员宅基地

文章浏览阅读2.9k次,点赞2次,收藏15次。在使用抽样之前,之前学的内容忘得差不多了。所以在使用本次例子之前,对获取该数据作下了解。hyper<-read.csv("http://archive.ics.uci.edu/ml/machine-learning-databases/thyroid-disease/hypothyroid.data",header=F)names<-read.csv("http://archive._r语言smote算法代码

Elastalert的报警功能拓展:分组报警_0 alerts sent-程序员宅基地

文章浏览阅读2.3k次。一 背景 基于ELK日志的报警时互联网公司标配,大一点公司都会自研组件,报警信息更加准确、规则多样化。(之前的五八到家就是自研的)我们采用了Elastalert报警。官网的地址:https://github.com/Yelp/elastalertElastalert自带的报警方式虽然多种多样,如下所示,但是不能实现根据报警信息分组发送。而且,不太符合国情:我们需要的是:邮件+短..._0 alerts sent

matlab iir 高通滤波器的设计,基于MATLAB的IIR滤波器的设计.doc-程序员宅基地

文章浏览阅读598次。MACROBUTTON MTEditEquationSection2 SEQ MTEqn \r \h \* MERGEFORMAT SEQ MTSec \r 1 \h \* MERGEFORMAT SEQ MTChap \r 1 \h \* MERGEFORMAT 毕业设计 课程设计 毕业论文 详细资料 联系QQ号;1620812008本科毕业设计(论文)基于MATLAB的IIR滤波..._matlab设计iir滤波器为高通滤波器,截至频率为0.5π

随便推点

不同DP线规格支持分辨率情况_dp规格-程序员宅基地

文章浏览阅读1.1w次,点赞3次,收藏10次。_dp规格

current_thread_info在ARM32和ARM64平台的不同点解析_arm64 thread_info-程序员宅基地

文章浏览阅读2.5k次。首先对current_thread_info不熟悉的同学可以先百度一下这是个什么东西?我们这里仅仅简单的提一下,current_thread_info用于获取当前进程的信息。ARM32平台相关定义#define THREAD_SIZE_ORDER 1#define THREAD_SIZE (PAGE_SIZE &lt;&lt; THREAD_SIZE_ORDER)union thr..._arm64 thread_info

阿里P8用这份402页多线程与架构设计笔记,征服你 吊打你_阿里线程框架-程序员宅基地

文章浏览阅读121次。前言随着计算机硬件的不断发展,CPU进入多核时代,并发运算因此也上升到了并行运算的高度,作为Java程序员,如何最大化地“压榨”CPU的资源,利用CPU超高的计算速度编写高效快速运行的程序,如何解决CPU与RAM之间速度不匹配的问题呢?今天分享一份《Java高并发编程详解多线程与架构设计》就会帮你解决这些问题,本书结合作者的实践经验,不仅介绍了高速缓存Cache、Cache Line、Java内存模型,以及现代CPU基本架构等相关知识,还深入讲解了Java跨平台的高并发解决方案。本书实._阿里线程框架

宝塔php伪静态规则,使用宝塔管理nginx伪静态规则配置方法技巧-程序员宅基地

文章浏览阅读1.8k次。我们网站使用的服务器环境一般有IIS、Apache、Tomcat、Nginx 等,他们各有优劣。一般虚拟空间使用IIS 和 Apache居多,这两个的配置都比较简单,IIS一般都安装了ISAPI_Rewrite 模块,可以直接使用和Apache一样的.htaccess文件来配置,直接将.htaccess文件上传到网站根目录即可。.htaccess 文件代码RewriteEngine OnRewri..._宝塔怎么添加htaccess规则

2023 Zblog对接微信小程序源码 附教程_博客小程序源码-程序员宅基地

文章浏览阅读189次。在HbuilderX中打开前端项目,依次点击 运行 =》 运行到小程序模拟器 =》微信开发者工具。必要工具:HbuilderX,微信开发者工具。_博客小程序源码

mysql组合索引与单列索引_假设有一张名为orders的订单表-程序员宅基地

文章浏览阅读1.1k次。1、组合索引能够避免回表查询:假设有一张订单表(orders),包含order_id和product_id二个字段。一共有31条数据。符合下面语句的数据有5条。执行下面的sql语句:select product_id from orderswhere order_id in (123, 312, 223, 132, 224);这条语句要mysql去根据order_id进行搜索,然后返回_假设有一张名为orders的订单表

推荐文章

热门文章

相关标签