传统语言(比如C语言等)需要用if语句来判断是否出现例外。但在Java中:
+ throw异常
+ 运行时系统在调用栈中查找
+ 捕获(catch)异常代码
语句:
**抛出异常**:
```Java
throw 异常对象
```
**捕获异常**:
```Java
try{
// fields;
}cache(异常类名 异常形式参数名){
// 异常处理语句组
}...
{}finally{
// 异常处理语句组
}
```
其中,`catch`可以0到多个语句;finally可有可无。
## 1. `Exception`类
**构造方法**:
```Java
// 方法一:无参数
public Exception();
// 方法二:带异常信息
public Exception(String message);
// 方法三:信息+原因
public Exception(String message, Throwable cause);
```
常用方法:
```Java
getMessage();
getCause();
printStackTrace();
```
## 2. 多异常处理
要求:子类异常要在父类异常之前
`finally`语句:无论有无异常都会执行!
## 3. 受检异常
在Java中,`Exception`分两种:
+ `RuntimeException`(运行时异常)及其子类,可以不明确处理;
+ 否则称为**受检异常**(checked Exception)。受检异常是要**明确处理**的,要么捕获,要么抛出。
受检异常处理方法:
+ `catch`
+ `throws`:在方法签名后面加`throws XXXX`声明
注:在子类中,如要覆盖父类的一个方法,若父类中的方法声明了`throws`异常,则子类的方法也可以`throws`异常。
## 4. 自定义异常类
定义方法:
+ 继承自Exception类或某个子Exception类
+ 定义属性和方法或重载父类的方法
重抛异常及异常链接的方法:
+ 将当前捕获的异常再次抛出:`throw e`
+ 重新生成一个异常并抛出:`throw new Exception("some message");`
+ 重新生成并抛出一个新异常,该异常包含了当前异常的信息,如:
- `throw new Exception("some message", e);`
- 可用`e.getCause()`来得到内部异常
## 5. 断言(assertion)
这是自JDK 1.4起增加的功能。
格式:
* `assert`
* `assert : info`
JUnit测试:如何在IntelliJ idea中用?
## 6. 程序调试
一般来说,程序中的错误通常可以分三大类:
* 语法错误(Syntex Error)
* 运行错误(Rumtime Error)
* 逻辑错误(Logic Error): `debug`或`unit test`
Debug: 用IDE就能做,idea做的挺好的。