java学习之异常三
目录
一、throws
一、基本说明
二、使用细节
二、自定义异常
一、 基本概念
编辑二、自定义异常的步骤
三、实例
四、练习
三、throw和throws的区别
四、本章作业
第一道
第二题
第三题
第四题
一、throws
一、基本说明
package com.hspedu.throws_;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;/*** @author GQQ* @version 1.0*/
public class Throws01 {public static void main(String[] args) throws FileNotFoundException{f1();}public static void f1() throws FileNotFoundException,NullPointerException,ClassCastException {//创建了一个文件流对象//1.这里的异常是一个FileNotFoundException 编译异常,必须要明确的处理//2.使用前面讲过的try-catch-finally//3.使用 throws ,抛出异常,让调用f1方法的调用者处理//4.throws可以抛出方法中产生的异常类型:FileNotFoundException,也可以抛出其父类Exception//5.throws 关键字后也可以是 异常列表,即可以抛出多个异常FileInputStream fis = new FileInputStream("d:\\aa.jpg");}
}
二、使用细节
package com.hspedu.throws_;import java.io.FileInputStream;
import java.io.FileNotFoundException;/*** @author GQQ* @version 1.0*/
public class ThrowsDetail {public static void main(String[] args) {f2();//运行异常,默认throws处理}public static void f2() {//1.对于编译异常, 程序中必须处理, 比如 try-catch 或者 throws//2.对于运行时异常,程序中如果没有处理, 默认就是 throws 的方式处理int n1 = 10;int n2 = 0;double res = n1 / n2;}public static void f1() throws FileNotFoundException {//在f1()中调用方法f3(), f3()抛出一个编译异常: FileNotFoundException//编译异常必须要显式的处理,两种:t-c-f/throwsf3();}public static void f3() throws FileNotFoundException {//编译异常FileInputStream fis = new FileInputStream("d:\\aa.jpg");}public static void f4() {//1.在此处调用f5()是OK的//2.f5()抛出的是一个运行异常//3.运行异常有默认处理机制,并不要求显式处理f5();}public static void f5() throws ArithmeticException {//运行异常}
}class Father {public void method() throws RuntimeException {}
}class Son extends Father {//3.子类重写父类的方法时,抛出的异常类型要么和父类一致,或者是父类异常类型的子类型//子类抛出的异常类型 范围 <= 父类//4. 在 throws 过程中, 如果有方法 try-catch , 就相当于处理异常, 就可以不必 throws@Override//如果是throws Exception就会报错//如果是throws FileNotFoundException 也会报错因为这是编译异常,跟运行异常之间不存在继承关系public void method() throws NullPointerException {//NullPointerException是RuntimeException的子类}
}
二、自定义异常
一、 基本概念

二、自定义异常的步骤
三、实例
package com.hspedu.customexception_;/*** @author GQQ* @version 1.0*/
public class CustomException {public static void main(String[] args)/*throws Exception*/{int age = 124;if(!(age >= 18 && age <= 120)){//可以通过构造器,设置打印出的信息throw new AgeException("年龄需要在18-120之间");}System.out.println("年龄范围正确...");//如果只是扔出异常而没有catch,则不会执行此语句}
}
//自定义一个异常
//一般情况下,自定义异常是继承自RuntimeException
//2.即把自定义异常做成运行时异常,好处是: 我们可以使用默认的处理机制
//3.如果写成是extends Exception,则是编译异常,
// 4.就必须在main方法中显式的抛出异常 throws Exception,或者使用t-c-f
class AgeException extends RuntimeException{public AgeException(String message) {super(message);}
}
四、练习
package com.hspedu.customexception_;/*** @author GQQ* @version 1.0*/
public class CustomExceptionExercise {public static void main(String[] args) {try{ReturnExceptionDemo.methodA();} catch (Exception e){System.out.println(e.getMessage());}ReturnExceptionDemo.methodB();}}
class ReturnExceptionDemo{static void methodA(){try {System.out.println("进入方法A");throw new RuntimeException("制造异常");}finally {System.out.println("用A方法的finally");}}static void methodB(){try {System.out.println("进入方法B");return;} finally{System.out.println("调用B方法的finally");}}
}
考察知识点:如果抛出了异常throw new RuntimeException("制造异常");,或者是出现了return语句就表示要结束此方法,剩余的代码不会再执行,但是如果有finally,那么finally中的代码必须执行,所以此时就会优先执行finally中的代码
三、throw和throws的区别
四、本章作业
第一道
我的代码
package com.hspedu.homework;/*** @author GQQ* @version 1.0*/
public class EcmDef {public static void main(String[] args) {/*编写应用程序EcmDef.java,接收命令行的两个参数(整数),计算两数相除。计算两个数相除,要求使用方法 cal(int n1,int n2)对数据格式不正确、缺少命令行参数、除0 进行异常处理数据格式不正确:NumberFormatException缺少命令行参数:ArrayIndexOutOfBoundsException除0:ArithmeticException*/try {//如果用这个循环条件的话,即使传入了3个参数也不会报错for (int i = 0; i < args.length; i++) {int n1 = Integer.parseInt(args[0]);int n2 = Integer.parseInt(args[1]);cal(n1,n2);}} catch (NumberFormatException e) {throw new NumberFormatException("数据格式不正确");}catch (ArrayIndexOutOfBoundsException e) {throw new ArrayIndexOutOfBoundsException("缺少命令行参数");}catch (ArithmeticException e) {throw new ArithmeticException("被除数为0,运算异常");}System.out.println("程序继续执行...");}public static void cal(int n1 ,int n2){System.out.println("res = " + n1 / n2);}
}
代码问题:
在命令行输入参数时,数组args的数据就已经传入到main方法中了,所以
就算没有发生异常,此循环也会被执行 参数的个数 次,此时循环次数就是3
for (int i = 0; i < args.length; i++) {int n1 = Integer.parseInt(args[0]);int n2 = Integer.parseInt(args[1]);cal(n1,n2);
}
运行结果
并且此代码只在 命令行参数只有一个的时候 会抛出异常,不能判断命令行参数 为多个或者0个的情况
正确代码
package com.hspedu.homework;/*** @author GQQ* @version 1.0*/
public class EcmDef02 {public static void main(String[] args) {//首先对传入的参数个数进行判断try {if(args.length != 2){throw new ArrayIndexOutOfBoundsException("参数个数不正确");//扔出异常后需要用try-catch来捕获异常}int n1 = Integer.parseInt(args[0]);int n2 = Integer.parseInt(args[1]);cal(n1,n2);} catch (ArrayIndexOutOfBoundsException e) {System.out.println(e.getMessage());;} catch (NumberFormatException e) {System.out.println("数字类型转换异常");}catch (ArithmeticException e) {System.out.println("数学运算异常(除数为0)");}System.out.println("继续执行程序...");}public static void cal(int n1, int n2){System.out.println("res=" + n1 / n2);}
}
第二题
package com.hspedu.homework;/*** @author GQQ* @version 1.0*/
public class HomeWork02 {public static void main(String[] args) {//String[] args是一个空数组,里面没有存储任何数据System.out.println(args.length);//由于args是一个空数组,这里会发生ArrayIndexOutOfBoundsException//发生异常后,下面的代码都不会执行if(args[4].equals("john")){System.out.println("BB");}else{System.out.println("AA");}Object o= args[2];//ok,String是Object的子类Integer i =(Integer)o;//ClassCastException,Integer和String没有继承关系//String i =(String)o;//OK}}
第三题
package com.hspedu.homework;/*** @author GQQ* @version 1.0*/
public class HomeWork03 {public static void main(String[] args) {try {func();System.out.println("A");//在try中如果抛出了异常,剩余代码块就不执行,所以此处不输出} catch (Exception e) {System.out.println("C");//捕获异常并打印 即第三步 C}System.out.println("D");//由于异常已经被捕获,所以可以正常输出 D,结果就是BCD}public static void func() {//静态方法try {//第一步是抛出异常,但是一旦抛出异常,就不会执行剩余代码//但是finally中的代码必须执行,所以先输出B,再抛出异常throw new RuntimeException();//第二步} finally {System.out.println("B");//第一步 B}}}
第四题
package com.hspedu.homework;/*** @author GQQ* @version 1.0*/
public class HomeWork04 {public static void main(String[] args) {try{showExce();//调用此方法后抛出一个异常,剩余代码不再执行System.out.println("A");}catch(Exception e){System.out.println("B");} finally{System.out.println("C");}System.out.println("D");}public static void showExce() throws Exception{throw new Exception();//抛出异常}
}
相关文章:

java学习之异常三
目录 一、throws 一、基本说明 二、使用细节 二、自定义异常 一、 基本概念 编辑二、自定义异常的步骤 三、实例 四、练习 三、throw和throws的区别 四、本章作业 第一道 第二题 第三题 第四题 一、throws 一、基本说明 package com.hspedu.throws_;import java.i…...

生产者向 Kafka 发送消息的执行流程
(1)生产者要往 Kafka 发送消息时,需要创建 ProducerRecoder,代码如下: ProducerRecord<String,String> record new ProducerRecoder<>("CostomerCountry","Precision Products","Fr…...

Linux命令·netstat
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。 如果你的计算机有时候…...

《心安即是归处》读书笔记
目录 作者简介 经典摘录 一个人活在世界上,必须处理好三个关系 什么叫人生呢? 谈一下人性的问题 了解人生的意义与价值 人生之美 评断一本书的好与坏有什么标准呢? 知足知不足 作者简介 季羡林,随便查询一下作者简介&…...

C++:使用红黑树封装map和set
目录 一. 如何使用一颗红黑树同时实现map和set 二. 红黑树的节点插入操作 三. 红黑树迭代器的实现 3.1 begin()和end() 3.2 operator和operator-- 3.3 红黑树迭代器实现完整版代码 四. map和set的封装 附录:用红黑树封装map和set完整版代码 1. RBTree.h文件…...

Go 命令
目录 文章目录 go buildgo cleango fmtgo getgo installgo testgo toolgo generategodoc其它命令 go build 这个命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。 如果是普通包,就像我们在1.2节中编写的mymath包…...

LEO、HW、LSO、LW 分别代表什么?
LEO :是 LogEndOffset 的简称,代表当前日志文件中下一条。HW:水位或水印一词,也可称为高水位 (high watermark) ,通常被用在流式处理领域 (flink、spark) ,以表征元素…...

问题 B: 跳石头(C++)(二分答案)
目录 1.题目描述 2.AC 1.题目描述 问题 B: 跳石头 时间限制: 1.000 Sec 内存限制: 128 MB提交 状态 题目描述 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点…...

bugku——变量1
拿到题目后是一串PHP代码,给到提示是flag在变量中,接下来进行代码审计 error_reporting(0):关闭错误报告 include “flag1.php”:包含flag1.php文件 highlight_file(_file_):页面进行语法高亮显示 isset($_GET[‘args’])…...

网络数据包丢失监控
什么是网络数据包 数据包或网络数据包是通过网络传输的小数据单元。顾名思义,这些是小的、离散的数据单元。单独来看,这些单位不一定有多大意义。它们只是正在传输的整体消息的一部分,这些消息已被组装成多个层。但是,当组合在一…...

Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接
目录 前言 1. 配置Mongodb源 2. 安装MongoDB 3. 局域网连接测试 4. 安装cpolar内网穿透 5. 配置公网访问地址 6. 公网远程连接 7. 固定连接公网地址 8. 使用固定地址连接 转载自Cpolar Lisa文章:Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接「内网…...

CSS面试题:30道含答案和代码示例的练习题
什么是 CSS?它的作用是什么? CSS(层叠样式表)是一种用于描述网页样式的语言。它的作用是控制网页的布局、字体、颜色、背景等方面的样式。如何在 HTML 页面中引入 CSS? 可以使用 标签将 CSS 文件引入到 HTML 页面中。例…...

时间轮的golang实践浅析
引言 下列代码模仿一段RPC请求的执行过程,执行后会有哪些问题: RPC代码示例答案:因为超时控制后未阻断后续请求,导致并发读写产生Panic思考:客户端发起 HTTP 请求后,如果在指定时间内没有收到服务器的响应…...

Linux命令_stress 快速模拟CPU、内存、磁盘消耗
ping的安装命令:apt-get install -y inetutils-ping 会遇到Unable to locate package inetutils-ping问题 正确的操作是: ** 这时候需要敲:apt-get update,这个命令的作用是:同步 /etc/apt/sources.list 和 /etc/apt/…...

可视化绘图技巧100篇分析篇(二)-生存曲线(LM曲线)
目录 前言 几个高频面试题目 roc曲线和生存曲线区别 生存曲线模型 生存曲线组件讲解...

UP主发车啦!撩人仙侠文系列,谁来管管这个反派啊!
本人书龄4年,平时很爱看小说,阅遍无数经典修仙文,熬夜党的最爱啊!!!!我心中的仙侠top,都是我的心头爱。 一般我都会跟朋友说这六本五星级仙侠好文,如果她们不看…...

K8S使用持久化卷存储到NFS(NAS盘)
参考文章:K8S-v1.20中使用PVC持久卷 - 知乎 目录 1、概念: 1.1 基础概念 1.2 PV的配置 1.2.1 静态PV配置 1.2.2 动态PV配置 1.2.3 PVC与PV的绑定 1.2.4 PVC及PV的使用 2 部署PV及PVC 2.1 所有K8S机器都需要安装NFS程序 2.2 仅针对需要暴露文件…...

一图看懂 multidict 模块:类似于字典的键值对集合,键可以多次出现,资料整理+笔记(大全)
本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 multidict 模块:类似于字典的键值对集合,键可以多次出现,资料整理笔记(大全) 🧊摘要🧊模…...

django CBV 与 DRF APIView源码分析
django CBV源码分析 在django框架中,视图层中的逻辑即可以使用函数处理也可以使用类进行处理,如果在视图层中使用函数处理请求,就是FBV(function base views),如果在视图层中使用类处理请求,就是CBV(class base views…...

沃尔玛入驻教程:中国卖家如何免费、快速入驻沃尔玛walmart.com?
作为一家全球知名的零售巨头,沃尔玛(Walmart)的在线商城walmart.com拥有庞大的消费者基础和巨大的商机。对于中国的卖家来说,入驻沃尔玛的平台是一个很好的机会,但是有没有什么方法可以免费、快速入驻呢?有…...

《花雕学AI》Poe 上的四种 AI 机器人,你该怎么选?ChatGPT、Sage、Claude 和 Dragonfly对比
虽然 ChatGPT 是一项革命性的技术,但它作为一个消费产品却有点失败。你可能会花很长时间等待 OpenAI 的聊天机器人加载,或者根本无法使用它,因为它太大了。就算你能用上它,它也很缓慢,而且它的界面也很丑陋。它甚至没有…...

localStorage
目录 localStorage与sessionStorage localStorage的Set与Get localStorage传递参数 localStorage与sessionStorage 现代浏览器提供了一种被称为"Web Storage APIs"(Web 存储接口)的机制,允许在同一浏览器的不同标签页之间共享数…...

二十五、SQL 数据分析实战(9个中等难度的SQL题目)
文章目录 题目1: App 使用频率分析题目2: App 下载情况统计题目3: 寻找活跃学习者题目4: 商品分类整理题目5: 商品销售分析题目6: 网约车司机收益统计题目7: 网站登录时间间隔统计题目8: 不同区域商品收入统计题目9: 信贷逾期情况统计 题目1: App 使用频率分析 现有一张用户使…...

JavaSE_02基本语法-编程单词词汇
boolean [bʊlɪən] 变量的基本数据类型之一:布尔型const [kɒnst] n. 常量,常数constant [kɒnst(ə)nt] n. [数] 常数;恒量continue [kən’tɪnjuː] vi. 继续,连续;default [dɪ’fɔːlt; diːfɔːlt] 默认的,缺…...

区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测
区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRDNN深度神经网络分位数回归时间序列区间预测。QRDNN模型…...

如何使用aframe.js构建一个简单的VR播放器
在当今这个信息化的时代,虚拟现实(VR)已经开始逐渐成为一种新的生活方式。作为一名前端开发工程师,在学习和探索VR技术方面,aframe.js是一个非常有趣和有用的工具。在本文中,我将介绍如何使用aframe.js构建…...

Fiddler抓包工具常见功能介绍,还不会的进来看
目录 Fiddler的功能面板 一、Statistics数据统计面板,性能分析 二、Inspectors查看请求与响应 三、Filters过滤器 1、User Filters启用 2、Action 3、过滤器实际应用 四、AutoResponder请求重定向 1、什么是请求重定向? 2、为什么要用这个功能&…...

基于海鸥算法优化的核极限学习机(KELM)分类算法-附代码
基于海鸥算法优化的核极限学习机(KELM)分类算法 文章目录 基于海鸥算法优化的核极限学习机(KELM)分类算法1.KELM理论基础2.分类问题3.基于海鸥算法优化的KELM4.测试结果5.Matlab代码 摘要:本文利用海鸥算法对核极限学习机(KELM)进行优化,并用于分类 1.KE…...

JAVA代码规范审查
JAVA代码规范审查 1. 添加必要的注释 所有的类都必须添加创建者和创建日期,以及简单的注释描述 方法内部的复杂业务逻辑或者算法,需要添加清楚的注释 一般情况下,注释描述类、方法、变量的作用 任何需要提醒的警告或TODO,也要注…...

Centos8安装redis7
1.下载: 官网下载:Download | Redis 把安装包上传至服务器: 2.安装: 解压redis: [rootnode202 ~]# cd /usr/local/soft/ [rootnode202 soft]# tar -zxvf redis-7.0.11.tar.gz 安装: 进入redis-7.0.1…...