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

本文通过实例介绍了Java中的异常处理机制,包括try-catch结构、自定义异常类(如DangerException)、内部类的使用、匿名类(包括匿名子类和接口实现)、lambda表达式以及assert断言。通过实际编程练习,展示了如何在处理成绩输入验证和车站危险品检测场景中应用这些概念。
摘要由CSDN通过智能技术生成

目录

一、实验目的

二、实验内容

三、实验小结


一、实验目的

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爱好者指正,小弟定当虚心受教!

  • 13
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Orion Guan's 山月润无声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值