java异常

下面是算术异常。

抛出的异常其实是个类。

下面是空指针异常。

 用异常时,下面语句不会执行。

上面这些是运行时异常

 下面这是编译时异常。

 

在程序编译期间发生的异常,称为编译时异常,也称为受检查异常

在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常。
RunTimeException 以及其子类对应的异常,都称为运行时异常。
注意:编译时出现的语法性错误,不能称之为异常。
1. Throwable 是异常体系的顶层类,其派生出两个重要的子类 , Error Exception。
2. Error 指的是 Java 虚拟机无法解决的严重问题,比如: JVM 的内部错误、资源耗尽等 ,典型代表: StackOverflflowError OutOfMemoryError ,一旦发生回力乏术。
3. Exception 异常产生后程序员可以通过代码进行处理,使程序继续执行。比如:感冒、发烧。我们平时所说 的异常就是Exception

  • 如何抛出异常 

代码触发异常和手动发出异常。

下面是手动触发异常。

注意事项
1. throw 必须写在方法体内部
2. 抛出的对象必须是 Exception 或者 Exception 的子类对象
3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处理,直接交给 JVM 来处理
4. 如果抛出的是编译时异常,用户必须处理,否则无法通过编译
5. 异常一旦抛出,其后的代码就不会执行

异常的捕获 

 异常的捕获,也就是异常的具体处理方式,主要有两种:异常声明throws 以及 try-catch捕获处理。

 下面throws后加的意思是告诉编译器这里可能会有异常

 main中的test也需要事先声明异常。

 声明异常后出现异常依然会报错,而且报错后语句不会执行。

处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助 throws 将异常抛 给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常

可以用逗号声明多个异常。非受查异常也可以声明。

1. throws 必须跟在方法的参数列表之后
2. 声明的异常必须是 Exception 或者 Exception 的子类
3. 方法内部如果抛出了多个异常, throws 之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型 具有父子关系,直接声明父类即可。

 可以使用try catch处理异常。

 下面这个可以打印错误信息。

 受查异常,没有捕获到就会报错。

异常后直接进入catch,不打印sd。

两行异常可以这样放到一行。

 下面这里用了Exception后,NULL会报错,因为Expection继承了所有异常,能捕获任何异常,把它放到第一个,那么后续异常没有任何问题了。

 try中存在多个异常时,捕获第一个异常。只会抛出一个异常。

如果捕获中没有对应异常的catch,那么异常会交给JVM,程序中断,dff也就不会打印。

 它的退出码是1,代表异常退出。

如果异常之间具有父子关系,一定是子类异常在前catch,父类异常在后catch,否则语法错误

比如不能Expection在第一个catch中。

  • finally 

 

 

 不管try是否抛异常,finally中的代码都会执行。

所以finally一般用于进行资源释放。

 

 根据编译器提示,把scanner写在try中,finally中就没有closel。

 正常来说,finally一定会执行的。

下面这样也会执行finally。

 throw用来抛出异常,throws用来声明异常。

关于 " 调用栈 "
方法之间是存在相互调用关系的, 这种调用关系我们可以用 "调用栈" 来描述. JVM 中有一块内存空间称为
"虚拟机栈" 专门存储方法之间的调用关系. 当代码中出现异常的时候, 我们就可以使用 e.printStackTrace();
方式查看出现异常代码的调用栈.
如果本方法中没有合适的处理异常的方式 , 就会沿着调用栈向上传递。

 

程序先执行 try 中的代码
如果 try 中的代码出现异常 , 就会结束 try 中的代码 , 看和 catch 中的异常类型是否匹配 .
如果找到匹配的异常类型 , 就会执行 catch 中的代码
如果没有找到匹配的异常类型 , 就会将异常向上传递到上层调用者 .
无论是否找到匹配的异常类型 , fifinally 中的代码都会被执行到 ( 在该方法结束之前执行 ).
如果上层调用者也没有处理的了异常 , 就继续向上传递 .
一直到 main 方法也没有合适的代码处理异常 , 就会交给 JVM 来进行处理 , 此时程序就会异常终

 

  • 自定义异常 

 有时候项目很复杂,不能像下面这样通过打印判断异常。这时候就需要自定义异常。

 

 

public class Test2 {
    public  String name = "asd";
    public  int id = 123;
    public void testh(String str, int a) throws UserNameExpection, IdExpection {
        if (!this.name.equals(str)) {
            System.out.println("姓名错误");
            throw new  UserNameExpection();
        }
        if (this.id != a) {
            System.out.println("id错误");
            throw new IdExpection();
        }
    }
    public static void main(String[] args) throws UserNameExpection, IdExpection {
       try {
           Test2 test2 = new Test2();
           test2.testh("asdf", 123);
       }
       catch(UserNameExpection u){
            u.printStackTrace();
           System.out.println("用户名异常");
        }
       catch(IdExpection i)
       {
           i.printStackTrace();
           System.out.println("id异常");
       }
    }
}

我们可以让异常打印特定的内容 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/12916.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业信息化建设该怎么做?方向和手段都在这了

企业信息化建设该怎么做? 如果现在是十年前,我一定会说,做信息化需要寻找熟悉不同编程语言、有经验的程序员。 但是现在,如果不是特别复杂的信息化系统,其实公司完全可以使用零代码平台自主开发,不需要再…

TryHackMe-Year of the Jellyfish(linux渗透测试)

Year of the Jellyfish 请注意 - 此框使用公共 IP 进行部署。想想这对你应该如何应对这一挑战意味着什么。如果您高速枚举公共 IP 地址,ISP 通常会不满意… 端口扫描 循例nmap 扫描结果中还有域名,加进hosts FTP 枚举 尝试anonymous Web枚举 有三个端…

Open Inventor 2023.1 Crack

发行说明 Open Inventor 2023.1(次要版本) 文档于 2023 年 4 月发布。 此版本中包含的增强功能和新功能: Open Inventor 10 版本编号更改体积可视化 单一分辨率的体绘制着色器中与裁剪和 ROI 相关的新功能MeshVizXLM 在 C 中扩展的剪辑线提…

[网络安全]第三次作业

目录 1. 什么是IDS? 2. IDS和防火墙有什么不同? 3. IDS工作原理? 4. IDS的主要检测方法有哪些详细说明? 5. IDS的部署方式有哪些? 6. IDS的签名是什么意思?签名过滤器有什么作用?例外签名…

SpringBootApplication最详细注解

SpringBootApplication最详细注解 SpringBootApplication的注解分类1.Target 2.Retention3.Document 4.Inherited5.SpringBootConfiguration 6.EnableAutoConfiguration6.1AutoConfigurationPackage这个注解6.1.1 Import6.1.2 AutoConfigurationpackages.Registrar.class 6.2 A…

经营软件公司五年,从外包到SaaS的踩坑笔记

文章目录 摘要开公司的两个误区关于管理关于合作关于SaaS其他经验大和强是两码事。大不是目的,强才是。小步试错、慢慢迭代不要掉入流量陷阱 摘要 经营公司已有五年,经历了三年的疫情停滞,现在正在转型为一家SaaS公司。虽然曾经迷茫过&#…

【虹科案例】固态量子发射器——虹科数字化仪用于控制钻石色心中的脉冲序列

前言 钻石的色心是晶格中的缺陷,其中碳原子被不同种类的原子取代,相邻的晶格位置是空的。由于其明亮的单光子发射和光学可访问的自旋,色心可以成为未来量子信息处理和量子网络的有前途的固态量子发射器。 实现自旋量子比特和相干光子纠缠的两…

Linux DHCP服务

DHCP 作用 DHCP动态主机配置协议作为服务端负责集中给客户端分配各种网络地址参数(主要包括IP地址、子网掩码、广播地址、默认网关地址、DNS服务器地址) 传输协议端口 服务端 UDP 67端口 客户端 UDP 68端口 工作原理 1) 客户端广播发送DISCOVER报文寻找服务端 2) 服务端广播发…

5G物理层信道pdcch说明(留档)

网络七层协议OSI是一个开放性的通信系统互连参考模型。 它是国际标准组织制定的一个指导信息互联、互通和写作的网络规范。 开放:是指只要遵循OSI标准,位于世界的任何地方的任何系统之间都可以进行通讯;开放系统:是指遵循互联网协…

MBD—模型的回调函数

目录 前面 如何设置? 应用 简单的提示 数据的初始化 前面 常用的回调函数有三类:模型的回调函数、模块的回调函数、信号的回调函数。这里分享一下模型的回调函数。 回调函数就是CallBack. 如何设置? 打开一个模型,在空白…

论文阅读【17】Dynamic ensemble learning for multi-label classification

论文十问十答: Q1论文试图解决什么问题? Q2这是否是一个新的问题? Q3这篇文章要验证一个什么科学假设? Q4有哪些相关研究?如何归类?谁是这一课题在领域内值得关注的研究员? Q5论文中提到的解决方…

简述API(电商数据API)网关的概念和功能

API 网关 ( API gateway ) 前言 在 IOT ( 物联网 )中,当我们的一些设备。例如( 监控、传感器等 )需要将收集到的数据和信息进行汇总时,我们就需要一个 API。(如果你需要Taobao/JD/pinduoduo平台…

Replicator简介

Replicator 文章目录 ReplicatorReplicator简介合成数据训练背后的理论Replicator核心组件已知的问题 Replicator简介 Omniverse Replicator 是一个高度可扩展的框架,构建在可扩展的 Omniverse 平台上,可生成物理上准确的 3D 合成数据,以加速…

OpenAI-ChatGPT最新官方接口《语音智能转文本》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(六)(附源码)

Speech to text 语音智能转文本 Introduction 导言Quickstart 快速开始Transcriptions 转录python代码cURL代码 Translations 翻译python代码cURL代码 Supported languages 支持的语言Longer inputs 长文件输入Prompting 提示其它资料下载 Speech to text 语音转文本 Learn how…

Mac配置QT

Mac配置QT 前言: 系统版本:Ventura 13.2.1 (22D68) 先安装homebrew,参考: https://blog.csdn.net/ZCC361571217/article/details/127333754 Mac配置: 安装Qt与Qt Creator: 通过Homebrew安装(若没Homeb…

用Spring Doc代替Swagger

1 OpenApi OpenApi 是一个业界的 API 文档标准,是一个规范,这个规范目前有两大实现,分别是: SpringFoxSpringDoc 其中 SpringFox 其实也就是我们之前所说的 Swagger,SpringDoc 则是我们今天要说的内容。 OpenApi 就…

【Python_Scrapy学习笔记(十三)】基于Scrapy框架的图片管道实现图片抓取

基于Scrapy框架的图片管道实现图片抓取 前言 本文中介绍 如何基于 Scrapy 框架的图片管道实现图片抓取,并以抓取 360 图片为例进行展示。 正文 1、Scrapy框架抓取图片原理 利用 Scrapy 框架提供的图片管道类 ImagesPipeline 抓取页面图片,在使用时需…

快速部署个人-ChatGPT Next Web

前提:要有梯子、谷歌账号。 目录 一、源码地址: 二、演示地址: 三、获取API密钥 四、 部署 五、重新部署 一、源码地址: GitHub - Yidadaa/ChatGPT-Next-Web: One-Click to deploy well-designed ChatGPT web UI on Verc…

批量给TXT文档插入带标题合成图片-Chatgpt生成TXT文档配图神器

1、我们用《Chatgpt 3.5-turbo软件》批量生成txt文档,但是这样txt文档里不带图片,直接发布到网站上,光有文字没有图片,效果也不是很理想,就需要一款配图软件。 2、提高文章的可读性和吸引力:插入图片可以丰…

JavaSE学习进阶day06_04 集合的嵌套和不可变集合

接昨天讲的内容,今天还要继续学习集合。学完今天的内容,集合就告于段落了,坚持! 集合的嵌套(掌握!): 什么是集合的嵌套?为什么要集合的嵌套?为了搞清楚这个…