1、要求
(1)定义Person类,包含name与age两个成员变量;
(2)在Person类的有参数构造方法中,进行年龄范围的判断,若年龄为负数或大于200岁,则抛出NoAgeException异常,异常提示信息“年龄数值非法”;
(3)在测试类中,调用有参数构造方法,完成Person对象创建,并进行异常的处理。
2、代码演示
(1)自定义异常类
1 class NoAgeException extends Exception{ 2 NoAgeException() { 3 super(); 4 } 5 6 NoAgeException(String message) { 7 super(message); 8 } 9 }
(2)Person类
1 class Person{ 2 private String name; 3 private int age; 4 Person(String name,int age) throws NoAgeException { 5 //加入逻辑判断。 6 if(age<0 || age>200) { 7 throw new NoAgeException(age+",年龄数值非法"); 8 } 9 this.name = name; 10 this.age = age; 11 } 12 //定义Person对象对应的字符串表现形式。覆盖Object中的toString方法。 13 public String toString() { 14 return "Person[name="+name+",age="+age+"]"; 15 } 16 }
(3)测试类
1 class ExceptionDemo{ 2 public static void main(String[] args) { 3 try { 4 Person p = new Person("xiaoming",20); 5 System.out.println(p); 6 } 7 catch (NoAgeException ex){ 8 System.out.println("年龄异常啦"); 9 } 10 System.out.println("over"); 11 } 12 }
3、构造函数到底抛出这个NoAgeException是继承Exception呢?还是继承RuntimeException呢?
(1)如果继承Exception,必须要throws声明,一声明就告知调用者进行捕获,一旦问题处理了调用者的程序会继续执行;
(2)如果继承RuntimeExcpetion,不需要throws声明的,这时调用是不需要编写捕获代码的,因为调用根本就不知道有问题。一旦发生NoAgeException,调用者程序会停掉,并有jvm将信息显示到屏幕,让调用者看到问题,修正代码