1. 异常(Exception)概述
在 Java 中,异常是程序执行中出现的意外事件。这些事件会导致正常的程序流程被中断。Java 提供了异常处理机制,使得程序在面对问题时不至于直接崩溃,而是能够优雅地处理错误。
异常的分类:
- Checked Exception(已检查异常):编译时检查的异常,必须显式地捕获或通过方法声明抛出。例子:
IOException
,SQLException
。 - Unchecked Exception(未检查异常):运行时异常,是
RuntimeException
的子类,编译时不会强制要求处理。例子:NullPointerException
,ArithmeticException
。 - Error:Java 中
Error
是系统级的严重错误,比如内存不足,这类错误通常不需要处理,系统会自动处理。
2. throw
关键字
throw
是用于显式抛出异常的关键字。它通常用于在代码中检测到某个条件不满足时主动抛出一个异常,以便告知程序中的其他部分处理这个异常。
用法:
throw new Exception("Error Message");
/**
ExceptionType 是异常类,常见的有
NullPointerException、IllegalArgumentException 等。
Error Message 是你自定义的错误信息,会在异常抛出时显示。
*/
示例:如果 `age` 小于 18,程序将会抛出 `illegalArgumentException`,并且终止执行。
public class ThrowExample {
public static void validateAge(int age) {
if (age < 18) {
throw new IllegalArgumentException("Age must be 18 or above to vote.");
} else {
System.out.println("Eligible to vote");
}
}
public static void main(String[] args) {
validateAge(15); // 这会抛出异常
}
}
注意:
throw
后面跟的是异常对象,而不是类型。- 一旦抛出异常,方法的执行会立即停止,程序将跳转到异常处理代码。
3. throws
关键字
throws
关键字用于声明一个 方法 可能会抛出的异常,以便调用者知道该方法可能会抛出哪些异常。调用者需要准备好处理这些异常,要么捕获它们,要么继续将其向上传递。
用法:
public void methodName() throws Exception {
// 代码块
}
/**
ExceptionType 是该方法可能抛出的异常类型,多个异常类型用逗号分隔。
如果一个方法可能抛出多个异常,必须分别声明。
*/
示例:divide
方法通过 throws
声明它可能抛出 ArithmeticException
。在 main
方法中,使用了 try-catch
块来捕获该异常。
public class ThrowsExample {
// 方法声明了会抛出异常
public static void divide(int a, int b) throws ArithmeticException {
if (b == 0) {
throw new ArithmeticException("Cannot divide by zero");
} else {
System.out.println("Result: " + a / b);
}
}
public static void main(String[] args) {
try {
divide(10, 0); // 这会抛出异常
} catch (ArithmeticException e) {
System.out.println("Caught an exception: " + e.getMessage());
}
}
}
4. throw
和 throws
的区别
throw
是用来抛出异常的:当代码中发生某种不希望发生的情况时,通过 throw
抛出一个异常对象。
throws
是用来声明异常的:当一个方法可能抛出某个异常时,使用 throws
声明该异常,以提醒调用该方法的程序员做好异常处理。
throw
:
用于在方法内部主动抛出异常对象。
当代码运行时发现错误或不满足某个条件时,使用 throw
抛出异常来通知调用者程序中发生了问题。
一旦抛出异常,程序将跳过当前方法的剩余代码,直接跳转到调用者的异常处理部分。
必须抛出一个具体的异常对象,且只能抛出一个对象。
throws
:
用于在方法声明中标明该方法可能抛出哪些类型的异常。
如果某个方法调用了可能抛出异常的方法,必须要么在当前方法中处理异常,要么通过 throws
声明将异常继续抛给上层调用者处理。
throws
主要起到通知的作用,告诉调用该方法的代码它有可能抛出异常。
throws
后面可以列出多个异常类型,用逗号分隔。