【Java】java异常处理机制(实验五)

目录

一、实验目的

二、实验内容

三、实验小结


一、实验目的

1、理解java的异常处理机制

2、掌握try catch结构和thow和thows关键字的用法

二、实验内容

1、编写一个程序,输入某个班某门课程成绩,统计及格人数、不及格人数及课程平均分。设计一个异常类,当输入的成绩小于0或者大于100时抛出异常,程序将捕获这个异常,并作出相应处理。

源代码:

实验运行截图:

2、车站检查危险品的设备,如果发现危险品会发出警告。编程模拟设备发现危险品。编写一个 Exception 的子类 DangerException,该子类可以创建异常对象,该异常对象调用 toShow()方法输出“属于危险品”。编写一个 Machine 类,该类的方法 checkBag(Goods goods)当发现参数 goods 是危险品时(goods 的 isDanger 属性是 true)将抛出 DangerException 异常。程序在主类的 main()方法中的 try-catch 语句的 try 部分让 Machine 类的实例调用checkBag (Goods goods)方法,如果发现危险品就在 try-catch 语句的 catch 部分处理危险品。

源代码:

实验运行截图:

三、实验小结

1、Java支持在一个类体中定义另一个类、类体中定义的类被称为内部类、而内部类外面的类被称为外嵌类。可以将内部类理解为外嵌类的一个成员变量、可以用被private、protected、static修饰,其中private修饰的内部类、类体中的成员不能通过外嵌类的对象来操作,只能在外嵌类体中操作private修饰的内部类成员;protected修饰的内部类、由于外嵌类包含内部类因此肯定都属于同一个包(文件夹)下,所以protected修饰的内部类、类体中的成员可以被外嵌类的对象操作;static修饰的内部类在其他类中(如:主类)可以通过“外嵌类名.内部类名”的方式创建内部类对象,否则内部类只能在外嵌类体中创建对象。

Static、private、protected可以修饰声明定义的内部类,在声明定义其它类中不能使用此三个访问限制符。final修饰的类不能被继承;abstract修饰的类只能当做父类来用,不能创建创建对象;public修饰的类同包不同包都可以被继承被访问,默认的友好类同包下能被继承、被访问、不同包下则不能。内部类中的成员变量和方法只能通过内部类对象的引用(地址)来操作内部类中的成员变量和方法。

2、匿名类从形式上看就是只有类体没有类声明(class 类名 extends 父类)的类。匿名类可以使开发者不用声明定义子类就可以创建子类的对象。

2.1匿名子类“new 父类名(调用父类构造方法所传递的参数) {类体}”:

        2.1.1由于匿名子类肯定要在某个类中创建(如:主类),所以匿名子类也属于创建匿名子类类体所在类的内部类。

        2.1.2在匿名子类的类体中可以操作外嵌类的成员变量和方法、以及从父类继承的成员变量和方法。

2.2实现接口的匿名类“new 实现接口名( ) {重写接口的方法}”:

3、不管是匿名子类还是实现接口的匿名类,由于都是没有类名的类所以其通过类体创建的对象的引用只能赋值给自己的父类或接口类变量(上转型对象),通过父类或接口变量来调用匿名类体中重写父类或接口抽象方法的方法。父类或接口的类型变量可以分别访问子类中重写了父类或接口的方法和从父类或接口中继承的成员变量和方法、不能访问子类类体中定义的成员变量和方法。

4、lambda匿名方法表达式“(形参)->{重写接口抽象方法的方法体}”:lambda表达式的返回值是方法的地址,可以将其赋值给一个单接口(接口中除了其他方法只有一个abstract抽象方法)类型的变量,这样接口变量就能以“接口名.接口抽象方法名是(实参)”的形式调用lambda表达式重写接口的方法。

5、用户自定义异常类流程:

                  ①定义一个异常类并继承Exception异常类。类体中要包含有存储程序方发生异常时的提示字符串的属性变量和构造方法来初始化属性变量保存的异常提示信息。

                  ②其它类在定义方法时如果想对方法执行时可能发生的异常进行处理,则只需在定义方法时在形参括号的后面加上:“void 方法名(形参) throws 异常类”,来指定方法体中使用throw抛出的异常类的对象所属的异常类;然后在方法体内结合if判断语句对可能出错的代码使用“throw new 异常类( )”的形式抛出异常类的对象地址。Tip: 方法一旦抛出了异常则方法的调用就立即结束、方法体中后面的代码不在执行。

③在主类中使用try-catch来对可能出错的代码进行监测。此时catch关键字就会捕捉到try代码块调用的方法体中抛出的异常类的对象,并会以“(异常类 变量)”的形式来接收方法体中所抛出的异常类的对象地址,从而就直接执行catch相应异常类中的代码块。

6、assert断言语句可以在调试程序时使用,当“assert 真假表达式:为假报错消息”表达式为真时对程序的执行没有影响、表达式为假时则输出报错消息并立即结束程序的执行。

Tip: Java程序在执行时断言语句默认是关闭状态,可以在调试执行字节码文件时使用“java -ea 字节码文件”来激活断言语句。

@声明:“山月润无声”博主知识水平有限,以上文章如有不妥之处,欢迎广大IT爱好者指正,小弟定当虚心受教!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

查看navicat保存的数据库连接密码

背景 经常使用navicat的朋友可能会碰到忘记数据库连接密码的情况,自然会想到navicat连接配置中就保存了密码。 个人经验,按以下步骤可查看密码明文 本人在mac上使用的navicat版本 1,导出connection_local.ncx 点击OK导出保存为connection_l…

AT7456E集成了EEPROM的显示器芯片

AT7456E 是一款集成了 EEPROM 的单通道、单色随屏显示发生器,集成了视频驱动器、同步分离器、视频分离开关以及 EEPROM,提高了系统的集成度,有效降低了系统成本。 优势 1.采用符合 NTSC 和 PAL 制式的 512 个用户可编程字符,适合…

fpga_硬件加速引擎

一 什么是硬件加速引擎 硬件加速引擎,也称硬件加速器,是一种采用专用加速芯片/模块替代cpu完成复杂耗时的大算力操作,其过程不需要或者仅需要少量cpu参与。 二 典型的硬件加速引擎 典型的硬件加速引擎有GPU,DSP,ISP&a…

【三、接口协议与抓包】TCP/UDP协议的基本实现

你好啊!我是山茶,一个持续探索 AI 测试之路的程序员。 TCP 协议与 TCP/IP 协议之间的关系,TCP 与 UDP 包含在 TCP/IP 中,TCP/IP 是协议簇名称 TCP (传输控制协议) 和 UDP (用户数据报协议) 是 TCP/IP 协议簇中,两个互…

数据结构与算法相关题解20240224

数据结构与算法相关题解 一、1. 两数之和二、121. 买卖股票的最佳时机三、122. 买卖股票的最佳时机 II四、169. 多数元素五、229. 多数元素 II六、55. 跳跃游戏七、45. 跳跃游戏 II 一、1. 两数之和 简单 给定一个整数数组 nums 和一个整数目标值 target,请你在该数…

2024全国水科技大会暨流域水环境治理与水生态修复论坛(六)

论坛召集人 冯慧娟 中国环境科学研究院流域中心研究员 刘 春 河北科技大学环境与工程学院院长、教授 一、会议背景 为深入贯彻“山水林田湖是一个生命共同体”的重要指示精神,大力实施生态优先绿色发展战略,积极践行人、水、自然和谐共生理念&…

ETL:数据转换与集成的关键过程

ETL:数据转换与集成的关键过程 在现代数据驱动的世界中,有效地管理和处理数据对于企业的成功至关重要。ETL(提取、转换、加载)是一种关键的数据处理过程,有助于将数据从源系统提取、清洗、转换并加载到目标系统中&…

【Spring】循环依赖

目录标题 什么是循环依赖循环依赖场景Java SE 演示Spring 容器演示三级缓存核心知识三级缓存四大方法三级缓存中的迁移 三级缓存源码分析源码思维导图 源码图例课前问题推荐阅读 循环依赖是什么?循环依赖的场景有哪一些?三级缓存分别是什么?三…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 🍑各版本平台支持情况…

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理

TensorRT及CUDA自学笔记003 CUDA编程模型、CUDA线程模型及其管理、CUDA内存模型及其管理 各位大佬,这是我的自学笔记,如有错误请指正,也欢迎在评论区学习交流,谢谢! CUDA编程模型 我们使用CUDA_C语言进行CUDA编程&am…

Python爬虫之点触验证码的识别

点触验证码的识别 除了极验验证码,还有另一种常见且应用广泛的验证码,即点触验证码。 可能你对这个名字比较陌生,但是肯定见过类似的验证码,比如 12306 就是典型的点触验证码。 直接点击图中符合要求的图。所有答案均正确&#…

PLC_博图系列☞基本指令“赋值取反”

PLC_博图系列☞基本指令“赋值取反” 文章目录 PLC_博图系列☞基本指令“赋值取反”背景介绍/:赋值取反说明参数示例 关键字: PLC、 西门子、 博图、 Siemens 、 赋值取反 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软…