java中的异常及throw&throws
1.java异常的抛出
java中抛出异常本质上都是通过java中throw对象来进行的
源码中异常的抛出
java中异常抛出一般有两种形式
- Jdk自己抛出,例如作为被除数的变量设置为0
- 我们自定义抛出 ,通过throw对象进行错误抛出
自定义抛出异常格式:
自定义异常类的名字 要以 Exception 结尾
需要继承 extends Throwable
自定义异常类时,如果在方法体中throw抛出,则方法体需要throws 异常类
public class TestThrow {
public static void main(String[] args) throws NumException {
int a=10;
if(a!=3){
throw new NumException();
}else {
System.out.println("***");
}
}
//如果不使用系统的错误,则需要自己定义一个错误类
private static class NumException extends Throwable {
static {
System.out.println("错误");
}
}
}
2.throw throws 的区别?
- throw 表示抛出某个异常。出现在方法体中。后面跟的是异常对象。
- throws表示可能抛出某个异常。出现在方法声明中,后面跟的是异常类型,并且调用该方法的方法需要进行异常处理。
3.异常注意事项
因为直接写throw new NumException();
这时候IDEA会报错,原因是抛出的异常没有进行处理:
解决方法有两个:
- 将错误提升到编译期,方法签名需要进行Throws声明
public static void main(String[] args) throws NumException {
- 将异常通过try /catch方法变成运行期异常,这时候方法体不需要进行声明
public class Test {
public static void main (String[]args) {
int a = 10;
if (a != 3) {
try {
throw new NumException();
} catch (NumException e) {
e.printStackTrace();
}
} else {
System.out.println("***");
}
}
//自定义的异常类
private static class NumException extends Throwable {
static {
System.out.println("错误");
}
}
}
4.异常中的继承关系
- 在继承关系中,如果父类的某个方法中声明了异常
- 子类可以选择不声明任何异常
- 子类必须声明异常本身或其子类型。也就是说: 孩子不能比爹更坏。
- 在继承关系中,如果父类的某个方法中没有声明异常
- 子类该方法中必须不能声明任何异常。也就是说: 孩子不能比爹更坏。
- 在这种情况下,子类方法中如果抛出了异常,必须是运行期异常。或者必须进行
try…catch处理
- 在这种情况下,子类方法中如果抛出了异常,必须是运行期异常。或者必须进行
- 子类该方法中必须不能声明任何异常。也就是说: 孩子不能比爹更坏。