我们可以在Java中覆盖时将throws子句的方法异常从unchecked更改为checked吗?

检查的异常是在编译时发生的异常,这些也称为编译时异常。这些异常不能在编译时简单地忽略。程序员应注意(处理)这些异常。

一个未经检查的异常是发生在执行时的例外。这些也称为运行时异常。其中包括编程错误,例如逻辑错误或API使用不当。编译时将忽略运行时异常。

未选中即可选中

当超类中的方法引发未检查的异常时,子类方法重写的方法无法引发检查的异常。

示例

在下面的示例中,我们在名为Super的类中具有一个抽象方法,该方法将引发未经检查的异常(ArithmeticException)。

在子类中,我们重写此方法并抛出一个检查的异常(IOException)。

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Scanner;

import java.io.InvalidClassException;

abstract class Super {

   public abstract String readFile(String path) throws ArithmeticException;

}

public class ExceptionsExample extends Super {

   @Override

   public String readFile(String path) throws FileNotFoundException {

      //TODO自动生成的方法存根

      return null;

   }

}

输出结果

ExceptionsExample.java:12: error: readFile(String) in ExceptionsExample cannot

override readFile(String) in Super

   public String readFile(String path) throws FileNotFoundException {

              ^

   overridden method does not throw FileNotFoundException

1 error

但是,当超类中的方法引发检查异常时,子类方法重写的方法可能引发非检查异常。

示例

在下面的示例中,我们只是交换超类和子类中方法的异常。

import java.io.File;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.util.Scanner;

import java.io.InvalidClassException;

abstract class Super{

   public abstract String readFile(String path) throws FileNotFoundException ;

}

public class ExceptionsExample extends Super {

   @Override

   public String readFile(String path) throws ArithmeticException {

      //TODO自动生成的方法存根

      return null;

   }

}

如果编译上面的程序,它将被编译而没有编译时错误

输出结果

Error: Main method not found in class ExceptionsExample, please define the main method as:

   public static void main(String[] args)

   or a JavaFX application class must extend javafx.application.Application

以上是 我们可以在Java中覆盖时将throws子句的方法异常从unchecked更改为checked吗? 的全部内容, 来源链接: utcz.com/z/331489.html

回到顶部