1. 异常
异常是指程序在执行过程中出现的一种突发事件,也可以说是一种错误情况,这种错误情况可能导致程序无法继续执行或是输出错误的结果。对于出现异常的情况,我们通常需要进行捕获和处理,以保证程序的正常运行。
1.1 异常处理
异常处理机制是一种在程序设计中处理异常的方法。在程序中通过设置异常处理程序,当出现异常时,异常处理程序将被调用,并执行异常处理的功能。
在软件开发中,异常处理机制为我们提供了一种有效的手段来处理可能出现的异常情况,从而提高程序的健壮性和可靠性。对于不同的异常,我们需要采取不同的处理措施。
1.2 异常分类
在Java语言中,异常可以分为系统级异常和应用程序级异常两种类型。
2. 系统级异常
系统级异常是由操作系统或硬件引起的异常,例如内存错误、文件未找到等。这种异常在程序中通常无法恢复,只能让程序中止运行或者调用操作系统的异常处理机制来进行处理。
在操作系统中,系统级异常通常由操作系统中断的机制来处理。当操作系统发现程序发生了异常情况时,就会触发中断,交给操作系统的异常处理程序来进行处理。操作系统的异常处理程序会根据不同的异常类型来采取不同的处理措施,例如记录日志、恢复现场或者让程序崩溃。
以下是一个C++中的系统级异常处理示例,通过调用系统函数SetUnhandledExceptionFilter
设置异常处理函数,当程序在运行过程中出现异常时,就会自动调用这个函数:
#include <Windows.h>
#include <iostream>
LONG WINAPI ExceptionFilterFunction(EXCEPTION_POINTERS* pException)
{
std::cerr << "Unhandled Exception Encountered" << std::endl;
return EXCEPTION_EXECUTE_HANDLER;
}
int main()
{
SetUnhandledExceptionFilter(ExceptionFilterFunction);
// The code that may cause exceptions
int* p = NULL;
std::cout << *p << std::endl;
return 0;
}
可以看到,在上述代码中,我们通过SetUnhandledExceptionFilter
函数设置了一个异常处理函数ExceptionFilterFunction
。当程序遇到未处理的异常时,就会自动调用这个函数,并输出错误信息。
3. 应用程序级异常
应用程序级异常是由应用程序自身引起的异常,这种异常通常是由程序中的代码逻辑错误、运行时错误或者外部环境变化引起的。与系统级异常不同,应用程序级异常通常是可以被捕获和处理的。
在Java语言中,应用程序级异常主要是通过throw
语句抛出一个异常对象,然后通过try-catch
语句来进行捕获和处理。
以下是一个Java中的应用程序级异常处理的示例,当输入的字符串为空或者为null时,就会抛出一个异常,并由catch
语句进行捕获和处理:
import java.util.Scanner;
public class ExceptionDemo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter a string: ");
String str = sc.next();
try {
if (str == null || str.equals("")) {
throw new Exception("Invalid input");
} else {
System.out.println("Input is: " + str);
}
} catch (Exception ex) {
System.err.println(ex);
}
}
}
可以看到,我们通过throw
语句抛出了一个异常对象,当遇到无效的输入时,就会抛出一个“Invalid input”的异常。然后通过catch
语句来捕获这个异常,并输出错误信息。这样就可以避免由无效输入引起的程序崩溃。
4. 总结
系统级异常和应用程序级异常是两种不同的异常类型,它们分别由操作系统和应用程序自身引起。系统级异常通常无法恢复,只能让程序停止运行或者调用操作系统的异常处理机制来进行处理。而应用程序级异常则可以被捕获和处理,从而保证程序的正常运行。