Java异常处理
目录
四、异常处理方法1——抛出异常(throw,throws的区别)
五、异常处理方法2——捕获异常(try...catch...finally...)
一、Throwable 类
- Throwable 是所有的异常的祖先;
- Throwable的两个重要子类:Exception(异常) 和 Error(错误);
- Throwable类的常用方法:
①getMessage() :返回异常发生时的详细处理。
②toString() :返回异常发生时的简要描述。
③getLocalizedMessage() :返回异常对象的本地化信息;使用Throwable的子类覆盖这个方法,可
以声称本地化信息。如果子类没有覆盖该方法,则该方法返回的信息与
getMessage() 返回的结果相同。
④printStackTrace() :在控制台上打印Throwable对象封装的异常信息。
二、Error (错误)
Error是代码运行时系统的内部错误和资源耗尽错误,是程序无法处理的错误;
如 Java虚拟机运行错误(VirtualMachineError)、类定义错误(NoClassDefFoundError) 等,这些错误是不可查的,因为它们在应用程序的控制和处理能力之 外,而且绝大多数是程序运行时不允许出现的状况。对于设计合理的应用程序来说,即使确实发生了这样的错误,本质上也不应该试图去处理它们所引起的异常状况。
三、Exception(异常)
Exception是程序本身可以处理的异常。
Exception的一个重要子类:RuntimeException (运行时异常)。
RuntimeException异常由Java虚拟机抛出,如:空指针异常,数组越界异常,算术异常(如除数为0) 等。
PS :异常与错误的区别在于,异常能被程序本身处理,而程序是无法处理错误的。
四、异常处理方法1——抛出异常(throw,throws的区别)
抛出异常:一个方法不处理这个异常,而且继续将问题抛给调用者来处理,使用 throw 和 throws 。
throw 和 throws 的区别:
- 使用位置不同:
throw 用在方法内,后面跟的是异常对象;
throws 用在方法上,后面跟的是异常类(多个类型可用逗号隔开)。 - 功能不同:
throws是用来声明可能发生的异常,并可给出预先的处理方法;
throw是抛出具体的异常,执行了throw之后会跳转到方法调用者,并将异常抛给调用者。
(所以 如果throw语句独立存在时,后面就不要再定义其他语句了,因为执行不到后面。) - throws 只是表示可能会出现某种异常,但不一定会出现这些异常;
throw 是直接抛出了异常,所以如果执行了throw语句,那么一定会抛出异常; - throws 和 throw 都是消极处理异常的方式,其实它们并没有去处理异常,而是将异常向上抛出,交由上层调用处理;
五、异常处理方法2——捕获异常(try...catch...finally...)
- tyr 块:用于捕获异常;其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
- catch 块:用于处理try捕获到的异常。
- finally 块:无论前面是否捕获了或处理了异常,finally块里的语句最后都会被执行;
当在try块或catch块中遇到return语句时,finally块里的语句会在方法返回之前被执行。 - finally块不会被执行的4种特殊情况:
①在finally语句块中发生了异常;
②在前面的代码中使用了System.exit()退出程序;
③程序所在的线程死亡了;
④关闭了CPU。