class ExceptionDemo{
public static void main(String[] args)
{
Person p = new Person();
Student s = new Student();
try{
s.setAge(4);
//p.setAge(-1);
}catch(InvalidAgeException e){//①
System.out.println(e.getMessage());
}catch(AgeTooSmallException e){//②
System.out.println(e.getMessage());
}catch(AgeTooBigException e){//
System.out.println(e.getMessage());
}
}
}
class Person {
private int age;
public int getAge(){
return this.age;
}
public void setAge(int age) throws AgeTooSmallException/*,AgeTooBigException*/{
if(age < 0){
throw new AgeTooSmallException("搞事情,还没有出生啊~~~~");
}
if(age > 200){
throw new AgeTooBigException("搞事情,你是王八啊~~~~");
}
this.age = age;
}
}
class Student extends Person {
public void setAge(int age)throws InvalidAgeException,AgeTooSmallException{
if(age < 6 || age > 15){
throw new InvalidAgeException("你的年龄不合格~~~");
}
super.setAge(age);
}
}
class InvalidAgeException extends AgeTooSmallException{
public InvalidAgeException(){
}
public InvalidAgeException(String msg){
super(msg);
}
}
class AgeTooSmallException extends Exception{
public AgeTooSmallException(){
}
public AgeTooSmallException(String msg){
super(msg);
}
}
class AgeTooBigException extends RuntimeException{
public AgeTooBigException(){
}
public AgeTooBigException(String msg){
super(msg);
}
}
————————————————
以上是我学习java异常是的一个简单小程序:
1,在上面可以看到,Person类中的setAge方法抛出俩自定义异常,年龄太大异常和年龄太小异常,由于年龄太小异常是运行时异常(RuntimeException),所以不用抛出(做了注释),之后分别在俩种情况下抛出异常。
2,之后又定义了一个Student类继承了Person类,Student类实现年龄在6~15岁之间算作正常的上学年龄,如果不在这个年龄范围之内,则抛出InvalidAgeException异常。因为Student是Person的子类,Student中setAge方法是重写Person类中的setAge的方法,因为一、如果父类抛出多个异常,其被重写(覆盖)方法必须抛出那些异常的子集,不能抛出新的异常。二、一个方法被覆盖时,覆盖他的方法必须抛出相同的异常或者异常的子类。
3,看到主函数中的try--catch结构catch的顺序需要注意:子类异常需要先行catch,否则代码不可达,编译也不通过。
----------------------------------------------------------------------------------------------------------------------------------
第一次写博客,留个纪念,多多指教哈~~~~~~~