在开始之前,让我们高喊我们的口号:
键盘敲烂,年薪百万!
目录
键盘敲烂,年薪百万!
异常综合练习:
自定义异常
异常综合练习:
自定义异常:
- 定义异常类
- 写继承关系
- 空参构造
- 带参构造
自定义异常意义:为了让控制台的报错信息更加见名知意
练习:
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 + "}";
}
}
练习二见绑定的资源~
今天的分享就到这里,欢迎在评论区交流
一起学习,一起进步!
如果你能关注我
那就是对我创作的最大鼓励啦!