MST

星途 面试题库

面试题:Java异常处理中throw和throws关键字的深度理解

详细阐述throw和throws关键字在Java异常处理机制中的作用、区别以及适用场景。如果在一个方法中同时使用了throw和throws,解释其逻辑执行过程,并举例说明如何通过这种方式来实现自定义异常的抛出与处理。
32.4万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

throw关键字

  1. 作用:用于在方法内部手动抛出一个异常对象,这意味着程序员可以在代码执行到某一特定条件时,主动中断正常的程序流程,抛出一个异常来表示出现了某种错误情况。
  2. 示例
public class Example {
    public static void main(String[] args) {
        int num = -5;
        if (num < 0) {
            throw new IllegalArgumentException("数字不能为负数");
        }
        System.out.println("数字为: " + num);
    }
}
  1. 适用场景:当在方法执行过程中检测到不符合业务逻辑或特定条件的情况,需要立即中断当前操作并告知调用者发生错误时使用。例如,在一个计算平方根的方法中,如果输入的是负数,就可以通过throw抛出异常。

throws关键字

  1. 作用:在方法声明时使用,用于声明该方法可能会抛出的异常类型。它告诉调用该方法的代码,在调用此方法时可能会遇到这些异常,调用者需要对这些异常进行处理。
  2. 示例
import java.io.FileNotFoundException;
import java.io.FileReader;

public class Example {
    public static void readFile() throws FileNotFoundException {
        FileReader reader = new FileReader("nonexistentfile.txt");
    }
}
  1. 适用场景:当一个方法内部调用了其他可能抛出异常的方法,而该方法本身又不想处理这些异常,就可以通过throws将异常抛给调用者处理。比如在文件读取、数据库连接等操作中,方法可能会抛出IOExceptionSQLException等异常,就可以使用throws声明。

区别

  1. 位置throw用于方法体内部,抛出一个具体的异常对象;throws用于方法声明的参数列表之后,声明该方法可能抛出的异常类型。
  2. 个数throw一次只能抛出一个异常对象;throws可以声明多个异常类型,用逗号分隔。

同时使用throw和throws的逻辑执行过程

  1. 逻辑:在方法内部使用throw手动抛出异常,然后在方法声明处使用throws声明该方法会抛出此异常。当throw被执行时,方法立即停止后续代码的执行,将异常抛给调用者。如果调用者没有处理该异常,异常会继续向上层调用栈传递,直到有合适的异常处理代码捕获它,否则程序会终止并打印异常堆栈信息。
  2. 示例
class MyException extends Exception {
    public MyException(String message) {
        super(message);
    }
}

public class Example {
    public static void process() throws MyException {
        int num = 10;
        if (num > 5) {
            throw new MyException("数字大于5,触发自定义异常");
        }
    }

    public static void main(String[] args) {
        try {
            process();
        } catch (MyException e) {
            System.out.println("捕获到自定义异常: " + e.getMessage());
        }
    }
}

在上述示例中,process方法内部通过throw抛出MyException自定义异常,同时在方法声明处使用throws声明会抛出该异常。在main方法中调用process方法时,使用try - catch块捕获并处理该异常。