欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java的声明抛出异常

程序员文章站 2022-07-07 15:40:34
...

声明抛出异常

这个体系中的所有类和对象都具备一个独有的特点;就是可抛性。可抛性的体现:就是这个体系中的类和对象都可以被throws和throw两个关键字所操作。

如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。

在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

语法格式:

[修饰符] 返回值类型 方法名([参数列表])[throws 异常列表]{
   //  throw 异常对象;
}      

throws是方法可能抛出异常的声明。用在声明方法时,表示该方法可能要抛出异常。异常列表位于方法体之前,可抛出多种类型的异常,每个类型之间用逗号隔开。

当某个方法可能会抛出某种异常时用于throws 声明可能抛出的异常,然后交给上层调用它的方法程序处理。

 

人工抛出异常

Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出。首先要生成异常类对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。       

IOException e = new IOException();
throw e;

可以抛出的异常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:

 throw new String("抛出异常");

throw 和throws关键字的区别

throw用于抛出异常对象,后面跟的是异常对象;throw用在方法内。

throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开;throws用在方法上。

 

重写方法声明抛出异常的原则

重写方法不能抛出比被重写方法范围更大的异常类型。在多态的情况下,对testMethod()方法的调用-异常的捕获按父类声明的异常处理。

public class A {
    public void testMethod() throws IOException {
        // ……
    }  
}
public class B extends A {
    public void testMethod() throws FileNotFoundException {
        // ……
    }  
}
public class C extends A {
    public void testMethod() throws Exception {  // 报错
        // ……
    }  
}

注意:

如果父类或者接口中的方法没有抛出过异常,那么子类是不可以抛出异常的,如果此时子类的覆盖的方法中出现了异常,只能try不能throws。

如果这个异常子类无法处理,已经影响了子类方法的具体运算,这时可以在子类方法中,通过throw抛出RuntimeException异常或者其子类,这样,子类的方法上是不需要throws声明的。

 

异常处理原则

功能抛出几个异常,功能调用如果进行try处理,需要与之对应的catch处理代码块,这样的处理有针对性,抛几个就处理几个。特殊情况:try对应多个catch时,如果有父类的catch语句块,一定要放在下面。

通常情况:方法内容如果有throw,抛出异常对象,并没有进行处理,那么函数上一定要声明,否则编译失败。但是也有特殊情况。

 

定义异常处理时,什么时候定义try,什么时候定义throws呢?

功能内部如果出现异常,如果内部可以处理,就用try;

如果功能内部处理不了,就必须声明出来,让调用者处理。

                                              Java的声明抛出异常

处理异常时不可以直接打印,或者直接输出,正确的处理方式:

1)根据异常情况处理对应的逻辑

2)使用文件记录异常,便于日后查看