throw关键字
throws关键字表示一个方法中可能发生的异常类型
一个方法表明方法中可能抛出的异常类型后,调用它的方法可以处理这些可能发生的异常
方式如下:
publi void dosome() throws IOException,NullPointerException{
}
其中dosome是方法名,IOException,NullPointerException是可能发生的异常类型
异常的分类
Throwable:
-Error:硬件中出现的异常
-Exception:程序级别的错误
-check异常(检查时异常)(随时随地检查)(必须要用try-catch块处理)
-RuntiomeException(运行时异常)(不会随时随地检查)(不一定要处理)(因为太常见了,如果每一次都要进行try-catch块处理,就显得太繁琐了)
子类重写父类方法时throws规则
package com.tedu.exception;
import java.io.IOException;
/**
* 重写的时候,子类抛出的异常范围要小于等于父类的异常范围
* @author Wildmess
*
*/
public class ThrowsOverrideDemo {
public static void main(String[] args) {
}
public void doSome() throws IOException,RuntimeException{
//
// String str = null;
// System.out.println(str.length());
}
}
class Son extends ThrowsOverrideDemo{
//子类异常范围等于父类中的异常范围
// public void doSome() throws IOException,RuntimeException{
//
// }
//子类异常范围小于父类中的异常范围
// public void doSome() throws IOException{
//
// }
// public void doSome() throws RuntimeException{
//
// }
// public void doSome() {
//
// }
//子类异常范围大于父类中的异常范围,直接红线报错
// public void doSome() throws Exception{
//
// }
//子类抛出父类中没有声明的异常,直接红线,不允许
// public void doSome() throws SQLException{
//
// }
}
自定义异常类
有时候我们自己编写的程序需要一些异常,但是这种异常在JavaAPI中没有,那么就需要我们自己定义一个异常类,在需要时声明或抛出
通常情况下,需要注意到下面几点:
1.定义好类名,做到见名知意;
2.需要继承Exception(直接或间接都可以)
3.定义序列化版本号(避免出现警告)
4.重写Exception定义的所有构造方法
package com.tedu.exception;
/**
* 自定义年龄不合法异常类
*
* @author Wildmess
*
*/
public class IllegaAgeException extends Exception{
private static final long serialVersionUID = 1L;
public IllegaAgeException() {
super();
}
public IllegaAgeException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
public IllegaAgeException(String message, Throwable cause) {
super(message, cause);
}
public IllegaAgeException(String message) {
super(message);
}
public IllegaAgeException(Throwable cause) {
super(cause);
}
}
使用自定义异常类
package com.tedu.exception;
public class Person {
private String name;
private int age;
private char gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) throws IllegaAgeException {
if(age<0 || age>150) {
/*
* 根据业务需要,可以在age值不符合要求时
* 主动抛出异常,表示程序中这样的赋值不被允许
* throw关键字 后面实例化一个异常对象,处理发生这个类型的异常
* 当前方法会在运行throw后终止,类似于return
*/
throw new IllegaAgeException("年龄不合法!");
}
this.age = age;
}
public char getGender() {
return gender;
}
public void setGender(char gender) {
this.gender = gender;
}
}
测试类中去处理年龄赋值发生的异常
package com.tedu.exception;
/**
* 使用Person类演示自定义异常的使用、抛出、处理
* @author Wildmess
*
*/
public class ThrowDemo {
public static void main(String[] args) {
Person p = new Person();
try {
p.setAge(500);
System.out.println("当前年龄:" + p.getAge() + "岁");
} catch (IllegaAgeException e) {
e.printStackTrace();
}
}
}