当前位置: 首页 > news >正文

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 发送消息的执行流程

&#xff08;1&#xff09;生产者要往 Kafka 发送消息时&#xff0c;需要创建 ProducerRecoder,代码如下&#xff1a; ProducerRecord<String,String> record new ProducerRecoder<>("CostomerCountry","Precision Products","Fr…...

Linux命令·netstat

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

《心安即是归处》读书笔记

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

C++:使用红黑树封装map和set

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

Go 命令

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

LEO、HW、LSO、LW 分别代表什么?

LEO &#xff1a;是 LogEndOffset 的简称&#xff0c;代表当前日志文件中下一条。HW&#xff1a;水位或水印一词&#xff0c;也可称为高水位 &#xff08;high watermark&#xff09; ,通常被用在流式处理领域 &#xff08;flink、spark&#xff09; &#xff0c;以表征元素…...

问题 B: 跳石头(C++)(二分答案)

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

bugku——变量1

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

网络数据包丢失监控

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

Linux服务器安装部署MongoDB数据库 - 无公网IP远程连接

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

CSS面试题:30道含答案和代码示例的练习题

什么是 CSS&#xff1f;它的作用是什么&#xff1f; CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页样式的语言。它的作用是控制网页的布局、字体、颜色、背景等方面的样式。如何在 HTML 页面中引入 CSS&#xff1f; 可以使用 标签将 CSS 文件引入到 HTML 页面中。例…...

时间轮的golang实践浅析

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

Linux命令_stress 快速模拟CPU、内存、磁盘消耗

ping的安装命令&#xff1a;apt-get install -y inetutils-ping 会遇到Unable to locate package inetutils-ping问题 正确的操作是&#xff1a; ** 这时候需要敲&#xff1a;apt-get update&#xff0c;这个命令的作用是&#xff1a;同步 /etc/apt/sources.list 和 /etc/apt/…...

可视化绘图技巧100篇分析篇(二)-生存曲线(LM曲线)

目录 前言 几个高频面试题目 roc曲线和生存曲线区别 生存曲线模型 生存曲线组件讲解...

UP主发车啦!撩人仙侠文系列,谁来管管这个反派啊!

本人书龄4年&#xff0c;平时很爱看小说&#xff0c;阅遍无数经典修仙文&#xff0c;熬夜党的最爱啊&#xff01;&#xff01;&#xff01;&#xff01;我心中的仙侠top&#xff0c;都是我的心头爱。 一般我都会跟朋友说这六本五星级仙侠好文&#xff0c;如果她们不看&#xf…...

K8S使用持久化卷存储到NFS(NAS盘)

参考文章&#xff1a;K8S-v1.20中使用PVC持久卷 - 知乎 目录 1、概念&#xff1a; 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)原创&#xff0c;转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 multidict 模块&#xff1a;类似于字典的键值对集合&#xff0c;键可以多次出现&#xff0c;资料整理笔记&#xff08;大全&#xff09; &#x1f9ca;摘要&#x1f9ca;模…...

django CBV 与 DRF APIView源码分析

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

沃尔玛入驻教程:中国卖家如何免费、快速入驻沃尔玛walmart.com?

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

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

JS设计模式(4):观察者模式

JS设计模式(4):观察者模式 一、引入 在开发中&#xff0c;我们经常会遇到这样的场景&#xff1a;一个对象的状态变化需要自动通知其他对象&#xff0c;比如&#xff1a; 电商平台中&#xff0c;商品库存变化时需要通知所有订阅该商品的用户&#xff1b;新闻网站中&#xff0…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...