面试题答案
一键面试throw关键字
- 作用:用于在方法内部手动抛出一个异常对象,这意味着程序员可以在代码执行到某一特定条件时,主动中断正常的程序流程,抛出一个异常来表示出现了某种错误情况。
- 示例:
public class Example {
public static void main(String[] args) {
int num = -5;
if (num < 0) {
throw new IllegalArgumentException("数字不能为负数");
}
System.out.println("数字为: " + num);
}
}
- 适用场景:当在方法执行过程中检测到不符合业务逻辑或特定条件的情况,需要立即中断当前操作并告知调用者发生错误时使用。例如,在一个计算平方根的方法中,如果输入的是负数,就可以通过
throw
抛出异常。
throws关键字
- 作用:在方法声明时使用,用于声明该方法可能会抛出的异常类型。它告诉调用该方法的代码,在调用此方法时可能会遇到这些异常,调用者需要对这些异常进行处理。
- 示例:
import java.io.FileNotFoundException;
import java.io.FileReader;
public class Example {
public static void readFile() throws FileNotFoundException {
FileReader reader = new FileReader("nonexistentfile.txt");
}
}
- 适用场景:当一个方法内部调用了其他可能抛出异常的方法,而该方法本身又不想处理这些异常,就可以通过
throws
将异常抛给调用者处理。比如在文件读取、数据库连接等操作中,方法可能会抛出IOException
或SQLException
等异常,就可以使用throws
声明。
区别
- 位置:
throw
用于方法体内部,抛出一个具体的异常对象;throws
用于方法声明的参数列表之后,声明该方法可能抛出的异常类型。 - 个数:
throw
一次只能抛出一个异常对象;throws
可以声明多个异常类型,用逗号分隔。
同时使用throw和throws的逻辑执行过程
- 逻辑:在方法内部使用
throw
手动抛出异常,然后在方法声明处使用throws
声明该方法会抛出此异常。当throw
被执行时,方法立即停止后续代码的执行,将异常抛给调用者。如果调用者没有处理该异常,异常会继续向上层调用栈传递,直到有合适的异常处理代码捕获它,否则程序会终止并打印异常堆栈信息。 - 示例:
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
块捕获并处理该异常。