markdown
### 概览
```text
程序在程序执行过程中由于代码设计错误/其他特殊问题,导致的错误,我们称之为异常
应用将错误暴露给用户是一个可耻的事情
```
```text
直接父类 Throwable
public class Throwable extends Object implements Serializable
```
#### (一)Error
```text
Java虚拟机无法解决的园中问题: JVM系统内部从错误,资源耗尽
```
#### (二)Exception
```text
其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理: 数组越
界,网络中断
大体分类为: 编译异常/运行异常
```
### 异常处理
*
*Java处理异常被定义为抓抛模型*
* ```text 第一步 抓 程序在执行过程中,一旦出现异常,就会在异常代码处生成一个对应异常类的对象,并将此 对象抛出,一旦抛出对象以后,其后的代码就不再执行 第二步 抛(异常处理方式) * try-catch-finally * throws ``` #### (一)try-catch-finally ##### * 注意事项 ```text 1. finally是可选的 2. 使用try将可能出现的异常的代码包起来,执行过程中一旦出现异常,就会生成一个对应异常类 的对象,根据此对象的类型,去catch中进行匹配 3. 一旦try中的异常对象匹配到某一个catch时,就进入异常的匹配。一旦处理完成就会跳出 try-catch结构(如果没有些finally的话) 4. catch中的异常类型如果没有子父类关系,则谁声明在上,谁声明在下无所谓 catch中如果满足子父类关系,则要求子类一定声明在父类上面,否则报错 5. 常用的异常处理方式 一. String getMessage() 二. printStackTrace() ``` ##### * 实例代码 ```text try { 代码 }catch (FilerException e){ 关于对象e 的处理 }finally { 最终执行代码块(一定会执行) #主要用来关闭 file,sql链接 } ``` 相当于将编译时需处理的异常,延迟到运行时出现 #### (二)throws ##### * 注意事项 ```text 1. "throws + 异常类型"写在方法的声明处,指明此方法执行时,肯能会抛出的异常类型 当此对象满足throws后异常类型时,就会被抛出,异常代码后续的代码就不会执行 ``` ##### * 实例代码 ```text #由调用该方法的实例try-catch处理/继续向上抛出 void showException() throws IOException {} ``` ### 自定义异常 #### (一)重写异常处理方法 ```text 子类抛出的异常不大于父类抛出的异常 ``` #### (二)手动抛出异常 ```text # 代码内手动抛出,防止错误代码继续执行 throw new Exception("EXCEPTION") ``` #### 自定义异常类 ```text # 1. 继承现有的异常结构 # 2. 提供static常量: serialVersionUID # 3. 提供重载的构造器 class MyException extends IOException{ static final long serialVersionUID = 7818375828146090155L; static String mess; public MyException(){ } public MyException(String mess){ super(mess); } @Override public String toString() { return "serialVersionUID " + serialVersionUID + " mess " + mess; } @Override public String getMessage() { return super.getMessage(); } } ``` **[返回教程主页](https://www.monody.net/p/blog-page_3.html)*
*
评论