原文: https://howtodoinjava.com/java/exception-handling/throw-vs-throws/
在 Java 异常处理中,throw关键字用于显式抛出方法或构造器中的异常。throws`关键字**用于声明该方法或构造器可能抛出的异常列表。
1. Java throw关键字
1.1 语法
要从方法或构造器引发异常,请使用throw关键字以及异常类的实例。
public void method(){//throwing an exceptionthrow new SomeException("message");}
1.2 处理受检与非受检异常
如果我们从方法中抛出非受检的异常,则处理该异常或在throws子句中声明不是强制性的。 例如,NullPointerException是非受检的异常。
public class JavaExample{public static void main(String[] args){method();}public static void method( ) {throw new NullPointerException();}}
但是,如果我们使用throw语句抛出受检异常,则必须在catch块**中处理该异常,或者必须使用throws声明显式地声明该方法。 例如,FileNotFoundException是受检异常。
public class JavaExample{public static void main(String[] args){try{method();}catch (FileNotFoundException e){e.printStackTrace();}}public static void method( ) throws FileNotFoundException{throw new FileNotFoundException();}}
在 Java 中,Error和RuntimeException的每个子类都是非受检的异常。 一个受检的异常是Throwable类下的所有其他内容。
1.3 异常传播
在调用栈中,异常会在方法与方法之间传播,直到被捕获为止。 因此,如果a()调用b(),然后调用c(),又调用d(),并且如果d()抛出异常,则该异常将从d传播到c到b传播到a,除非这些方法之一捕获异常。
如上所述,对异常处理程序的搜索从发生错误的方法开始,然后以与调用方法相反的顺序在调用栈中进行。
找到合适的处理程序(catch块)后,运行时系统会将异常传递给处理程序。 如果未找到异常处理程序,则异常到达 JVM 的默认异常处理程序,该程序将异常详细信息打印到日志并终止应用程序。
2. Java throws关键字
Java throws关键字用于声明方法执行期间可能发生的异常列表。
2.1 语法
要声明异常列表,请使用throws关键字以及异常类名称。
public static void method( ) throws FileNotFoundException, ConnectionException {//code}
2.2 可以抛出受检和非受检的异常
我们可以使用throws子句声明两种类型的异常,即受检和非受检的异常。 但是调用给定方法必须仅处理受检异常。 非受检异常的处理是可选的。
public class JavaExample{public static void main(String[] args){try{//Can skip handling of NullPointerException (unchecked exception)method();}catch (FileNotFoundException e){e.printStackTrace();}}public static void method( ) throws NullPointerException, FileNotFoundException {//code}}
3. Java 中throw和throws之间的区别
throw关键字用于从任何方法或构造器中显式抛出单个异常,而throws关键字用于方法和构造器声明中,表示该方法可能引发该异常。throw后跟异常类的实例,而throws后跟异常类的名称。throw用于方法和构造器,其中throws与方法和构造器签名一起使用。- 我们可以使用
throw仅抛出单个异常,但是可以使用throws声明多个异常,其中之一可以通过方法抛出也可以不通过方法抛出。 - 受检的异常将传播到调用方方法,而非受检的异常将不会传播,因此可能不需要显式的异常处理。
- 使用
throw关键字,我们还可以中断switch语句或循环,而无需使用break关键字,使用throws无法执行它。
学习愉快!
