Throwable的两个子类:
Error(应用程序无法处理的错误),包括VirtualMachineError、AWTError。
Exception(应用程序自身可以处理的问题),包括RuntimeException、IOException。
Error是错误,程序无法修复的,所以捕获之后也无能为力,比如class找不到,oom等。
捕获了也无法处理。
Exception是异常,是没有按照预期的流程执行。可以通过捕获修正到正常流程。例如数组越界等。
问题讨论:
问题:什么时候使用try ctash。
为了使app不crash,捕获异常Exception被大量使用,而在catch里不做任何处理。
这产生了很多问题,至少这样一个问题---由于不crash了,导致我们认为程序运行的很好,都是按照预期执行的。
使得问题被隐藏起来。
答:当我们确切的知道这里可能会有异常且知道有什么异常,我们就需要捕获它,并做对应的处理。
当我们只是为了程序不crash而加了try catch,很可能会隐藏问题。在try catch中也要做好异常上报,便于我们解决问题。
Jeff Richter讲C#的课,他在课上就说:别去捕获你不知道该怎么处理的exception,由它去吧。