异常
    异常就是程序出现了不正常的情况
    Java中的异常体系：
                         Throwable   Java中所有的异常和错误的父类
                       /         \
                Exception         Error
                    /   \
        RuntimeException  Exception

    Throwable   Java中所有的异常和错误的父类
        |- Exception Java中所有异常的父类，也就是异常类，他表示程序本身可以处理的问题
            |-RuntimeException 运行时异常，程序代码不会报错，但是运行后会报错。
            |-除了RuntimeException类及其子类以外的其他异常，就是程序代码会直接报错，我们必须处理这些异常。
        |-Error Java中所有错误的父类，也就是错误类，他表示不是程序的问题，而是系统的问题。
            如果Java中出现Error错误，那么大部分时间都不是代码的问题，而是系统或内存的问题。

    Java中的异常分为两大类：
        编译期异常：都是Exception类的子类，必须要我们进行处理，否则程序会发生错误，无法通过编译。
        运行时异常：都是RuntimeException类的子类，不需要我们处理，也可以和编译期异常一样进行处理。

        Java文件----编译期--》运行期

        Java程序想要执行，需要几步？
        1、Java源代码文件--->编译(javac.exe)--->Java字节码文件
        Java字节码文件--->解释(java.exe)--->机器码(二进制数据)并且执行

    我们之前遇到了异常，不做任何处理，都是交给Java虚拟机(JVM)进行处理。
        默认的处理：把异常名称，错误原因，异常出现的位置等信息输出到控制台。并且停止程序继续运行。


    我们要进行的异常处理方案：
        两种方案：
            |-1、我们也不处理了，只是把异常告诉虚拟机，这段代码可能出现异常了(声明异常) throws
            |-2、我们进行处理，就比较麻烦了:
                1、我需要先检测可能出现异常的代码块。 try
                2、判断可能出现什么异常并且给出解决方案    catch
                3、无论怎么解决，有些代码必须要执行。     finally
        无论是否处理都会用到的，抛出异常对象  throw


    我们可能会自定义一些符合我们业务的异常。
        建一个类，名称后面为Exception，为了区分该类为异常类。
        让该类继承Exception类或RuntimeException类。


    万事万物皆为对象

    throws  用在方法的后面，throws 后面的跟着的是异常类名。表示该方法里面的代码可能会引发某个异常：
    public void method() throws AgeException{   //这个方法里面的代码可能引发AgeException异常。

    }
    如果哪个方法调用了这个方法，那么就需要进行处理AgeException异常，否则也要使用throws继续声明。


    throw 用在方法体里面，后面跟着的是异常的对象名。表示手动抛出异常对象，需要方法体内部进行处理或者throws声明。



我们自己处理异常：
    格式：
        try{
            //是可能出现异常的代码
        }catch(异常类型 变量名){
            //处理方案
        }finally{
            //一定会被执行的代码
        }
案例：
商品类里面包含3个属性：商品名称、商品价格、商品库存
模拟实现用户购买商品的功能，使用ArrayList模拟商品列表，
当购买的商品不存在或者商品库存为0时，抛出自定义异常。
用户购买某一个商品时，对异常进行处理，并对库存进行改变。

步骤：
    1、创建商品类
    2、创建自定义的异常类：
        NotProductException 没有这个商品异常
        InventoryException 商品库存不足异常
    3、创建Main类
        创建一个购买的方法
        public void shopping(Product p){

        }






