Java中的异常处理除了捕获异常和处理异常之外,还包括声明异常和拋出异常,下面的话就来详细的给大家介绍一下java throws声明异常。
在一个方法产生一个它不处理的异常的时候,那么就需要在这个方法的头部声明这个异常,以便将该异常传递到方法的外部进行处理。
使用throws声明的方法表示这个方法不处理异常。
下面是throws具体格式:
returnType method_name(paramList) throws Exception 1,Exception2,…{…}
在这当中:
returnType表示返回值类型;
method_name表示方法名;
paramList表示参数列表;
Exception 1,Exception2,… 表示异常类;
假如,有多个异常类,它们之间用逗号分隔。
这些异常类可以是方法中调用了可能拋出异常的方法而产生的异常,也可以是方法体中生成并拋出的异常。
使用throws声明抛出异常的思路:
当前方法不知道如何处理这种类型的异常,该异常应该由向上一级的调用者处理,假如,main方法也不知道怎样处理这种类型的异常,也可以使用throws声明抛出异常,这个异常将交给JVM处理。
JVM对异常的处理方法是,打印异常的跟踪栈信息,并中止程序运行,这就是前面程序在遇到异常后自动结束的原因。
示例:
创建一个readFile()方法,这个方法用于读取文件内容,在读取的过程中可能会产生IOException异常,可是,在该方法当中不做任何的处理,而将可能发生的异常交给调用者处理。
在main()方法中使用try catch捕获异常,并输出异常信息。
具体代码:
import java.io.FileInputStream; import java.io.IOException; public class Test04 { public void readFile() throws IOException { // 定义方法时声明异常 FileInputStream file = new FileInputStream("read.txt"); // 创建 FileInputStream 实例对象 int f; while ((f = file.read()) != -1) { System.out.println((char) f); f = file.read(); } file.close(); } public static void main(String[] args) { Throws t = new Test04(); try { t.readFile(); // 调用 readFHe()方法 } catch (IOException e) { // 捕获异常 System.out.println(e); } } }
在上面的代码当中,首先在定义readFile()方法时用throws关键字声明在该方法中可能产生的异常,之后,在main()方法中调用readFile()方法,并使用catch语句捕获产生的异常。
方法重写时声明抛出异常的限制
使用throws声明抛出异常时有一个限制,是方法重写中的一条规则:
子类方法声明抛出的异常类型应该是父类方法声明抛出的异常类型的子类或相同,子类方法声明抛出的异常不允许比父类方法声明抛出的异常多。
如下:
public class OverrideThrows { public void test() throws IOException { FileInputStream fis = new FileInputStream("a.txt"); } } class Sub extends OverrideThrows { // 子类方法声明抛出了比父类方法更大的异常 // 所以下面方法出错 public void test() throws Exception {} }
上面的程序当中,Sub子类中的test()方法声明抛出Exception,这个Exception是其父类声明抛出异常IOException类的父类,这将导致程序不能够通过编译。
所以在编写类继承代码时要注意,子类在重写父类带throws子句的方法的时候,子类方法声明中的throws子句不能出现父类对应方法的throws子句中没有的异常类型,因此throws子句可以限制子类的行为。
也就是说,子类方法拋出的异常不能超过父类定义的范围。
java throws声明异常就给你介绍到这里了,更多java相关常见问题,请继续的来奇Q工具网进行了解吧。
推荐阅读: