Java方法覆盖中的异常处理
Java方法覆盖规则:
● 方法签名必须相同
● 方法返回值类型, 可以相同 ,子类方法的返回值类型可以是父类方法返回值类型的子类型
● 方法权限可以更宽泛
● 方法的异常不能大于父类方法的异常
自定义异常
package com.wkcto.chapter02.demo03;
//1) 定义一个类继承Exception
public class AgeOutOfBoundsException extends Exception {
//2) 一般提供两个 构造方法
public AgeOutOfBoundsException() {
super();
}
//带有字符串参数的构造方法, 这个字符串是异常信息
public AgeOutOfBoundsException(String message) {
super(message);
}
}
package com.wkcto.chapter02.demo03;
public class Person {
private String name;
private int age;
private String gender;
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", gender=" + gender + "]";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
//4) throw语句所在的方法通过throws 声明该异常
public void setAge(int age) throws AgeOutOfBoundsException {
//必要时,在setter()方法中,对参数接收的数据进行合理 性验证
if ( age >= 0 && age <= 130) {
this.age = age;
}else {
//年龄不合理 , 抛出一个异常
//3)在需要的位置,通过throw抛出一个异常对象
throw new AgeOutOfBoundsException("年龄越界");
}
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
}
package com.wkcto.chapter02.demo03;
/**
* 测试自定义异常
* @author 蛙课网
*
*/
public class Test {
public static void main(String[] args) {
/* //创建Person对象
Person lisi = new Person();
//直接给lisi的各个字段赋值 , 可能会赋值一些无效的值
lisi.name = "lisi";
lisi.age = 188888; //没有语法错误, 没有意义,赋的值无效, age表示一个人的年龄
lisi.gender = "男";
System.out.println( lisi );*/
//对字段进行封装后
Person lisisi = new Person();
lisisi.setName("lisis");
//5)对受异常进行预处理
try {
lisisi.setAge( 188888 );
} catch (AgeOutOfBoundsException e) {
e.printStackTrace();
}
lisisi.setGender("妖");
System.out.println( lisisi );
}
}
总结:
1、理解异常是什么,异常的作用
2、掌握异常类的结构: Throwable, Error , Exception, 编译时异常, 运行时异常
3、掌握异常预处理的方法: 捕获处理, 抛出处理
4、理解异常预处理方式的选择? 定义方法, 调用方法
5、记住方法覆盖中的异常处理
6、掌握自定义异常的方法