# 异常
### 一、生活中的异常:
感冒,癌症
### 程序中常见的异常:
```ArrayIndexOfBoundsException``` :数组的下标越界异常
```classCastException``` :类型转换异常
```IOException``` :流异常
```NullPointerException``` :空指针异常
```Error``` :错误,往往不是
```Exception``` :所有异常类的父类
## 二、异常的定义:
**异常 :指的是程序在执行过程中,出现的非正常的情况,最终会导致JVM的非正常停止。**
> 异常指的并不是语法错误,语法错了,编译不通过,不会产生字节码文件,根本不能运行
### 异常分为编译期异常和运行期异常:
1. 编译期出现的异常必须解决
2. 运行期的异常根据情况选择解决
## 三、处理异常的三种方式:
### 1. ```try catch``` 语法:
```java
try{
可能出现异常的代码块;
}catch(异常类型){
处理异常的代码块;
}
```
#### try catch 延伸的语法:
##### 1) ```catch``` 可以有多个代码块
```java
try{
可能出现异常的代码块;
}catch(异常类型){
处理异常的代码块;
}catch(异常类型){
处理异常的代码块;
}
```
> 如果多个catch 中异常类型有一定的关联,那么异常类型的范围应从小到大排序
##### 2) catch 代码块后面加上 ```finally```代码块
```java
try{
可能出现异常的代码块;
}catch(异常类型){
处理异常的代码块;
}catch(异常类型){
处理异常的代码块;
}finally{
代码块: 不管你try代码块里面的内容是否有异常,我finally代码中的内容都会被执行
往往用做释放资源的事情
}
```
> 面试题:```final``` ```finally``` ```finalize``` 三者的区别?
>
> - final用于声明属性,方法和类,分别表示属性不可交变,方法不可覆盖,类不可继承。
> - finally是异常处理语句结构的一部分,表示总是执行。
> - finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,供垃圾收集时的其他资源回收,例如关闭文件等。
### 2. ```throw``` 语法:
声明在方法体内,在方法体内向外抛出具体的异常实例。
```java
```
### 3. ```throws``` 语法:
一般声明在方法的后面,自己不去解决这个异常,谁调用该方法,谁去解决
### 四、throw 和 throws 区别?
A: 有throws的时候可以没有throw。
有throw的时候,如果throw抛的异常是Exception体系,那么必须有throws在方法上声明。
B: throws用于方法的声明上,其后跟的是异常类名,后面可以跟多个异常类,之间用逗号隔开
throw用于方法体中,其后跟的是一个异常对象名
## 五、自定义异常:
只需继承 ```Exception``` 异常即可,声明无参构造函数和有参构造函数
- JAVA笔记
- 01、Java扫盲
- 1、JVM、JRE和JDK的区别
- 2、环境变量path和classpath的作用是什么?
- 3、变量有什么用?为什么要定义变量?什么时候用?
- 4、&和&&的区别?
- 5、标示符命名规则
- 6、数据类型
- 7、类型转换
- 8、java语言的三种技术架构
- 9、java的跨平台性
- 10、有符号数据的表示法(次重点)
- 11、按位运算符
- 12、函数
- 13、重载
- 14、数组
- 15、内存结构
- 一、数据结构
- 随机数
- 流程控制语句
- if 和 if...else
- switch
- for
- 函数
- 重载
- 数组
- 数组的复制
- 冒泡排序法算法
- 方法
- 方法的重载
- 方法的练习
- 面向对象
- 面向对象的特点
- 如何创建类
- 如何创建对象
- 一、引用数据类型具有的默认值
- 二、成员变量和局部变量
- 三、构造函数
- 四、气球理论
- 五、继承(extends)
- 权限修饰符
- 封装
- 内存的分配
- 多态
- super关键字
- static关键字
- final关键字
- 抽象类 抽象方法(abstract)
- 接口(interface)
- 单例模式(singleton)
- Object类
- 内部类
- 匿名内部类
- 阶段项目
- 捕鱼达人
- 飞机大战
- 护盾功能
- 血条
- 爆炸
- API
- String 类相关的方法
- 第三方(Apache)jar包的使用
- 正则表达式
- StringBuffer 和StringBuilder 和Date
- 核心API:集合类
- List 集合
- 遍历集合的方式
- 包装类
- Map 集合
- 异常