一:基本介绍

  1. 如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
  2. 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

    二:举例

    1. public class Test {
    2. public static void main(String[] args) {
    3. Test test = new Test();
    4. test.A();//会交给调用者处理
    5. }
    6. public void A() throws Exception{
    7. //1: 这里的异常是一个FileNotFoundException编译异常
    8. //2: 使用throws ,抛出异常,让调用f2方法的调用者(方法)处理
    9. //3: throws后的异常类型可以原本的异常类型,也可以是它的父类throws
    10. //4: 关键字后也可以是异常列表,即可以抛出多个异常
    11. FileInputStream fis = new FileInputStream("d: //aa.txt");
    12. }
    13. }

    三;注意事项和使用细节

  3. 对于编译异常,程序中必须处理,比如try-catch或者throws

  4. 对于运行时异常,程序中如果没有处理,默认就是throws的方式处理

  5. 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型

    1. class A {
    2. public void T() throws Exception{
    3. }
    4. }
    5. class B extends A {
    6. @Override
    7. public void T() throws RuntimeException{
    8. }
    9. }
  6. 在throws 过程中,如果有方法try-catch,就相当于处理异常,就可以不必throws ```java

public class Test1 { public static void main(String[] args) {

  1. }
  2. public static void T() throws FileNotFoundException{
  3. //1: 因为 Z() 方法抛出的是一个编译异常
  4. //2: 即这时,就要 T() 必须处理这个编译异常
  5. //3: 在T() 中,要么 try-catch-finally
  6. // 或者继续 throws 这个编译异常
  7. Z();
  8. }
  9. public static void Z() throws FileNotFoundException {
  10. }
  11. public static void sakura(){
  12. //1:在 sakura()中调用方法 LF() 是可以的
  13. //2:原因是 f5() 抛出的是运行异常
  14. //3:而 java 中,并不要求程序员显示处理,因为有默认处理机制
  15. LF();
  16. }
  17. public static void LF() throws RuntimeException{
  18. }

} ```