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,否则代码不可达,编译也不通过。
----------------------------------------------------------------------------------------------------------------------------------
第一次写博客,留个纪念,多多指教哈~~~~~~~
新闻热点
疑难解答