异常
异常指程序运行中出现的不期而至的各种情况
发生在程序运行期间,影响了正常的程序执行流程
需要掌握的三种情况:
- 
检查异常(非运行时异常):编译时可以看到,除了运行时异常,其他都是非运行时异常 
- 
不检查异常(运行时异常):编译时看不到,运行时才会出问题,这些异常其实就是我们的代码逻辑写错了,我们一定要手动改正 例如:  
- 
错误(不是异常):编译时检查不到,一般不是人为导致,而是jvm的原因,其实就是人写的代码让JVM出问题 
Java把异常当做对象处理,并定义了一个基类java.lang.Throwable作为所有异常的超类
如图:

处理异常
- 抛出异常
- 捕获异常
五个关键字:try,catch,finally,throw,throws
//捕获异常的案例
public class lianxi {
    public static void main(String[] args) {
        int a=0;
        int b=1;
        try {//看是否有异常
            System.out.println(b/a);
        } catch (Exception e) {//捕获异常,参数为要捕获的异常类型,最大为throwable
            e.printStackTrace();//打印错误的栈信息
        } catch(Throwable t) {
            //可以有多个捕获,但要注意异常类型是由小到大
        } finally {
            //善后工作,无论是否有异常都会执行
        }
    }
}
捕获异常快捷键:选中要捕获异常的语句,Ctrl+Alt+T
//抛出异常的案例
public class lianxi {
    public static void main(String[] args) {
        try {
            new lianxi().test(1,0);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    //假设方法中处理不了这个异常,则在方法上抛出异常,让调用这个方法的来捕获它
    public void test(int a,int b)throws ArithmeticException{
        if (b==0){
            throw new ArithmeticException();//主动的抛出异常,一般在方法中使用
        }
    }
}
自定义异常
使用Java内置的异常类可以描述在编程时出现的大部分异常情况,初次之外,用户还可以自定义异常,自己创建异常类,只需要继承Exception类即可
总结
- 处理运行时异常时,采用逻辑去合理规避,同时辅助try-catch合理处理
- 在多重catch块后面,可以加一个catch(Exception)来处理可能被遗漏的异常
- 对于不确定的代码,也可以加上try-catch,处理潜在的异常
- 尽量去处理异常,切忌只是简单的调用printStackTrace()去打印输出
- 具体如何处理异常,要根据不同的业务需求和异常类型去决定
- 尽量添加finally语句块去释放占用的资源