异常
异常的顶层父类是Throwable
Throwable
- Error
- Exception
- 编译时异常Exception
- 必须声明或者捕获
- 运行时异常RuntimeException
- 可以声明不捕获,也可以进行捕获处理.
异常的处理:
自定义异常类:由我们自己书写一个异常类,继承Exception或者RuntimeException.在这个异常类中,我们只需要提供构造函数即可,里面可以写一些处理.
看个例子吧.
需求:使用自定义异常类,判断输入的person的年龄是否合法:age(0,120]
1 public class IllegalAgeException extends RuntimeException{ 2 public IllegalAgeException(String message){ //如果有异常的话,就执行带有message信息的这个构造函数,否则的话,使用无参的. 在person的构造函数中体现 3 super(message); 4 } 5 public IllegalAgeException(){ 6 super(); 7 } 8 } 9 10 class Person extends IllegalAgeException{ 11 private int age; 12 13 public int getAge() { 14 return age; 15 } 16 17 public void setAge(int age) { 18 this.age = age; 19 } 20 21 public Person(int age) { //在person的构造函数中判断年龄是否合法.不合法的话,直接抛给自定义异常类进行处理 22 //对输入的名字进行判断 23 if(age >= 120 || age <= 0) 24 throw new IllegalAgeException("请输入合法的年龄"); 25 this.age = age; 26 } 28 } 29 30 public class ThrowableDemo { 31 32 public static void main(String[] args) { 33 //创建一个person类的对象 34 Person p = new Person(-12); 35 System.out.println(p.getAge()); 37 } 39 }
声明和捕获:
- 声明 :throws
- 捕获 :try-catch-finally
继承中的函数复写异常细节:
- 子类复写父类的函数,要求函数的返回值类型,函数名,参数列表必须一致。
- 子类复写父类的函数,子类中函数访问权限大于等于父类中函数的访问权限。
- 不能修改访问方式
- 子类复写父类的函数时,如果父类的函数上没有声明异常,子类复写的时候,也不能声明异常。(重点,开发中会经常犯错误)只能使用try-catch代码块进行捕获处理。