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

自定义异常小练习

 在开始之前,让我们高喊我们的口号:

​​​​​​​

键盘敲烂,年薪百万!


目录

键盘敲烂,年薪百万!

异常综合练习:

自定义异常


异常综合练习:

自定义异常:

  1. 定义异常类
  2. 写继承关系
  3. 空参构造
  4. 带参构造

自定义异常意义:为了让控制台的报错信息更加见名知意

练习:

public class test {public static void main(String[] args) {/*需求:键盘录入自己心仪的女朋友姓名和年龄。姓名的长度在 3 - 10之间,年龄的范围为 18 - 40岁,超出这个范围是异常数据不能赋值,需要重新录入,一直录到正确为止。提示:需要考虑用户在键盘录入时的所有情况。比如:录入年龄时超出范围,录入年龄时录入了abc等情况*//*思路:1.键盘录入2.创建女朋友对象3.接收女朋友的姓名4.接收女朋友的年龄5.打印*//*为什么不直接使用sc.nextInt();?异常处理的局限性:当用户输入非数字内容(如 "abc")时,sc.nextInt()会抛出InputMismatchException,但输入缓冲区中的错误内容不会被清除,导致反复读取abc,无限循环。而通过sc.nextLine()读取整行并手动转换,可以完全控制输入缓冲区的状态。int num = sc.nextInt();sc.nextLine();   // 清除残留的换行符String str = sc.nextLine();   // 正常读取用户输入也可以一开始就直接使用nextLine*/Scanner sc = new Scanner(System.in);GirlFriend gf = new GirlFriend();while (true) {try {System.out.println("你女朋友的姓名是:");String name = sc.nextLine();gf.setName(name);System.out.println("你女朋友的年龄是:");String ageStr = sc.nextLine();int age = Integer.parseInt(ageStr);gf.setAge(age);break;} catch (NumberFormatException e) {System.out.println("输入的年龄的格式有误,请输入数字");}catch (RuntimeException e){System.out.println("姓名的长度或年龄的范围有误!");}}System.out.println(gf);}
}

Girl Friend类:

public class GirlFriend {private String name;private int age;public GirlFriend() {}public GirlFriend(String name, int age) {this.name = name;this.age = age;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {int len = name.length();if (len < 3 || len > 10) {throw new RuntimeException();}this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {if (age < 18 || age > 40) {throw new RuntimeException();}this.age = age;}public String toString() {return "GirlFriend{name = " + name + ", age = " + age + "}";}
}

练习二见绑定的资源~


今天的分享就到这里,欢迎在评论区交流

一起学习,一起进步!

如果你能关注我

那就是对我创作的最大鼓励啦!

http://www.lryc.cn/news/2392071.html

相关文章:

  • SpringBoot整合MinIO实现文件上传
  • 基于面向对象设计的C++日期推算引擎:精准高效的时间运算实现与运算重载工程化实践
  • 如何把 Microsoft Word 中所有的汉字字体替换为宋体?
  • 02. [Python+Golang+PHP]三数之和,多种语言实现最优解demo
  • MongoDB选择理由
  • 倚光科技在二元衍射面加工技术上的革新:引领光学元件制造新方向​
  • 驱动开发(2)|鲁班猫rk3568简单GPIO波形操控
  • 《软件工程》第 3 章 -需求工程概论
  • VMware-MySQL主从
  • ArcGIS Pro 3.4 二次开发 - 几何
  • 2023-ICLR-ReAct 首次结合Thought和Action提升大模型解决问题的能力
  • Rust 开发的一些GUI库
  • 【第四十六周】文献阅读:从 RAG 到记忆:大型语言模型的非参数持续学习
  • 从智能提效到产品赋能的架构实践
  • 《Python 虚拟环境完全指南:如何管理项目依赖,避免版本冲突》
  • 微信小程序带数组参数跳转页面,微信小程序跳转页面带数组参数
  • 服务器开机自启动服务
  • 关于OT IIOT系统远程访问的零信任安全
  • 【Doris基础】Apache Doris vs 传统数据仓库:架构与性能的全面对比
  • 【VScode】python初学者的有力工具
  • Linux系统中为Qt项目封装一个udp客户端类
  • 443端口:HTTPS通信的安全基石
  • 宝塔安装WordPress程序
  • Agent 的7 中设计模式
  • OpenGAN:基于开放数据生成的开放集识别
  • 【node】Express创建服务器
  • 使用 OpenCV 实现哈哈镜效果
  • DeepSeek-R1-0528 模型最新发布:编程推理能力跃升
  • git仓库服务gogs详解
  • PaddleNLP 的文本分类项目