🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ![](https://img.kancloud.cn/69/6e/696ec4511a5cc67a919ee0db4b99f9ab_647x399.png) ## Throwable * Java 语言中所有错误或异常的超类。 * Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。 * 它还可以包含 cause(原因) ## Error * Error 是 Throwable 的子类,用于指示合理的应用程序**不应该试图捕获的严重问题**。 * 大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个“正规”的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。 * 在执行该方法期间,无需在其 throws 子句中声明可能抛出但是未能捕获的 Error 的任何子类,因为这些错误可能是再也不会发生的异常条件。 * Java 程序通常不捕获错误。错误一般发生在严重故障时,它们在Java程序处理的范畴之外。 ## Exception Exception 异常主要分为两类 1. RuntimeException(运行时异常),RuntimeException 被称作「非受查异常」。 2. 其他Exception,称作「受查异常」 受查异常就是指,编译器在编译期间要求必须得到处理的那些异常,你必须在编译期处理了。 ## 自定义异常类型 Java 的异常机制中所定义的所有异常不可能预见所有可能出现的错误,某些特定的情境下,则需要我们自定义异常类型来向上报告某些错误信息。 在 Java 中你可以自定义异常。编写自己的异常类时需要记住下面的几点。 * 所有异常都必须是 Throwable 的子类。 * 如果希望写一个检查性异常类,则需要继承 Exception 类。 * 如果你想写一个运行时异常类,那么需要继承 RuntimeException 类。 ## 异常的处理方式 ### try...catch关键字 * 使用 try 和 catch 关键字可以捕获异常。 * try/catch 代码块放在异常可能发生的地方。 ### try catch不会影响性能 * 异常如果没发生,也就不会去查表,也就是说你写不写try catch 也就是有没有这 个异常表的问题,如果没有发生异常,写try catch对性能是木有消耗的,所以不会让程序跑得更慢。 * try 的范围大小其实就是异常表中两个值(开始地址和结束地址)的差异而已,也是不会影响性能的。 ### throws/throw 关键字 如果一个方法**没有捕获一个检查性异常**,那么该方法**必须使用 throws 关键字来声明**。throws 关键字放在方法签名的尾部。**也可以使用 throw 关键字抛出一个异常**,无论它是新实例化的还是刚捕获到的。 ### finally关键字 注意,凡是有finally,那么一定会执行里面的代码,并且根据里面的return ## 推荐阅读 [java-异常体系](https://www.jianshu.com/p/49d2c3975c56)