34-处理线程中的不可控异常
1.8 处理线程中的不可控异常
在任何编程语言中,提供对应用中错误情景的管理机制都是非常重要的。和其他现代编程语言一样,Java编程语言提供了基于异常的错误管理机制。当发生错误情况时,Java将抛出异常类。除了已有的异常类,还可以自定义异常类,以便管理类中产生的错误。
Java也提供了捕获和处理异常的机制。有一些异常必须被捕获或者通过方法上的 throws
声明再次抛出,这类异常被称为检查异常。而有一些异常不需要方法上的声明或捕获,这类异常被称为非检查异常。
- 检查异常: 该异常必须在方法的
throws
语句中声明,或者在方法内部捕获,例如IOException
或ClassNotFoundException
。 - 非检查异常: 该异常不需要声明或者捕获,例如
NumberFormatException
。
如果在一个线程对象的 run()
方法内抛出检查异常,则必须对其进行捕获处理,因为 run()
方法不接受 throws
语句。如果一个非检查异常在一个线程对象的 run()
方法内被抛出,则会默认将异常栈信息打印到控制台,并退出程序。
幸运的是,Java提供了用于捕获和处理线程对象中抛出的非检查异常机制,以避免程序的结束。
本节将在案例中使用这种机制。