1.异常:代码运行的时候发生了错误。

异常处理的目的是为了提高系统的健壮性
    try{

 }catch(异常类型 变量){
 
 }

2.异常类型(Throwable)

Throwable异常的代表
   /      \
Error Exception Error : 错误 ,一般不是代码的执行的错误,一些不可逆转的错误是Error JVM死掉了 停电了

Exception : 可以捕获可以处理 Exception(异常) : 是一切异常的父类 / \
RuntimeException 其他异常 

3.RuntimeException(运行时异常)

子类:
NullPointerException(空指针异常)
IndexOutOfBoundsException(子类ArrayIndexOutOfBoundsException, StringIndexOutOfBoundsException )
ArithmeticException(数学操作异常:除0异常)
ClassCastException(类型强转异常)
java.lang.IllegalArgumentException 非法参数异常

4.异常捕获

运行时异常: 可以不捕获,即使不捕获代码也不会提示报错。 所以运行时异常你可以捕获也可以不捕获。

运行时异常是在执行程序的时候出现异常,然后自动创建对应的异常类型抛出去。
	      程序出现异常-->程序自动创建异常对象--->程序自动抛出异常对象 --- > catch捕获对应的异常对象

5.自定义异常的抛出与捕获

运行时异常一般是自动抛出的。

自己抛出异常:  如果抛出的是Exception的子类而不是RuntimeException类型就是必须检查的异常
                 如果抛出的是RuntimeException类型就是非必须检查异常

异常的两个关键字:throw throws 
    throw  是用来产生异常对象。
throws 是用来抛出异常给上层调用者,用于方法的后面。

注意:
     非必须检查异常可以捕获也可以不捕获
 检查异常:
    从异常产生以后必须捕获,如果当前方法不想捕获,那就一定要通过throws抛出去给上层方法
    同样上层方法收到必须检查异常也必须处理。

6.finally关键字

无论什么情况最终都要执行的代码块。
即使try中有return最终也会执行finally
注意:finally中定义return没有意义,会覆盖合法的return语句。

finally的作用和意义:
   finally是对应try的程序结束的时候才会执行
   所以finally一般用于在程序结束以后释放程序使用的资源。节约内存