Person类
package com.LearnTest02.D02;
public class Person {
/* ①
* String name;
* int age;
* String gender;
*/
private String name;//⑤添加private
private int age;
private String gender;
//②重写toString方法
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
//⑥再添加get/set方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
//⑫throw所在的方法通过throws声明该异常
public void setAge(int age) throws AgeOutOfBoundsException {
//⑦对数据进行验证
if(age >= 0 && age < 130) {
this.age = age;
}else {
//⑧年龄不合法,可以抛出一个异常,没有年龄不合法的异常,那么我们就自己定义一个
//⑪通过throw抛出一个异常,注意没有是 s 的
throw new AgeOutOfBoundsException("年龄越界");
//⑭⑮⑯⑰⑱⑲⑳
}
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
Test类
package com.LearnTest02.D02;
public class Test {
public static void main(String[] args) {
//③用户直接修改对象的字段,可能赋值一些无效的值,如:age=2222;gender=四五六;等
/*Person per = new Person();
per.name = "李四";
per.age = 22;//如果说年龄被输入为2222,那么该如何
per.gender = "男";
System.out.println(per);*/
//④解决这个问题就是需要用到封装
Person per02 = new Person();
per02.setName("张三");
//⑬进行捕获处理
try {
per02.setAge(222);
} catch (AgeOutOfBoundsException e) {
e.printStackTrace();
}
per02.setGender("男");
System.out.println(per02);
}
}
自定义异常:AgeOutOfBoundsException
package com.LearnTest02.D02;
/*
* ⑨定义一个类继承Exception
*/
public class AgeOutOfBoundsException extends Exception {
//⑩根据父类生成子类构造方法,一般定义两个构造方法
public AgeOutOfBoundsException() {
super();
}
//有字符串参数的构造方法,这个字符串参数就是异常信息
public AgeOutOfBoundsException(String message) {
super(message);
}
}
输出结果为:(自定义异常完成)
⑩根据父类生成子类构造方法(Alt+Shift+S)
然后一般情况选择
即可
自定义异常:
1)定义一个类继承Exception
2)在自定义异常类中提供两个构造方法
3)在需要的位置通过 throw 抛出异常对象
4)throw 所在的方法通过 throws 声明该异常
5)调用方法时,需要对受检异常进行预处理