美文网首页java基础
java基础-day14-异常和集合

java基础-day14-异常和集合

作者: 触手不可及 | 来源:发表于2021-06-26 08:29 被阅读0次

    异常和集合

    1. 异常

    1.1 生活中的异常
    生病
        医生: 你是怎么了?
        我: 我难受
        医生: 你那里难受
        我: 我肚子疼
    
    1.2 开发中的异常
     主要划分为两大类
        Error
        Exception
     统一的父类
        Throwable 异常和错误的基类
     
     主要了解的方法:
     构造方法 Constructor
        Throwable();
            创建或者说生成一个异常/错误类对象,异常/错误信息为null
        Throwable(String message);
            创建或者说生成一个异常/错误类对象,异常/错误信息为message
     
     成员方法:
        String toString();
            展示当前异常/错误的简要信息
        String getMessage();
            获取当前异常/错误的信息方法
        void printStackTrace();
            展示错误/异常的前因后果【红字】
    
    package com.qfedu.a_throwable;
    
    /**
     * Throwable常用方法演示
     * @author Anonymous
     *
     */
    public class Demo1 {
        public static void main(String[] args) {
            // 创建了一个Throwable类对象 
            // Throwable throwable = new Throwable();
            Throwable throwable = new Throwable("急性肠胃炎");
            
            System.out.println(throwable.getMessage());
            System.out.println(throwable.toString());
            // throwable.printStackTrace();
            
            testThrowable();
        }
        
        public static void testThrowable() {
            new Throwable("测试错误").printStackTrace();
        }
    }
    
    1.3 异常和错误的区别
    Exception 
        异常 可以处理,代码中也就不存在异常
    Error 
        错误 只能避免
    
    错误和异常根据报错结尾来判断不同的情况。
    
    错误只能避免
    异常有两种处理方式
        1. 捕获
        2. 抛出
    
    1.4 捕获异常
    格式:
        try {
            有可能出现异常的代码
        } catch (异常对象) {
            对应当前异常处理方式
        }
        
        try {
            有可能出现异常的代码
        } catch (异常对象) {
            对应当前异常处理方式
        } finally {
            用于关闭当前程序使用到的资源。
        }
    
    package com.qfedu.a_throwable;
    
    /*
     * 异常捕获注意事项:
     *      1. 当代码捕获异常之后,JVM会认为当前程序中并没有异常存在,继续执行代码
     *      2. 代码从异常发生开始,不在正常运行
     *      3. 代码中如果出现了多个异常,可以添加多个catch块进行捕获处理,对症下药
     *      4. Exception可以处理所有异常,但是不能处理所有的异常都用Exception,
     *      可以使用Exception捕获多余问题,或者说未发现问题
     *      5. 可以使用 | 位或在同一个catch 中捕获多个异常。后期IDE工具会鄙视你
     */
    public class Demo3 {
        public static void main(String[] args) {
            test(20, 0, null);
        }
        
        public static void test(int num1, int num2, int[] arr) {
            int ret = 0;
            
            try {
                // 有可能出现异常的代码
                arr[0] = 10;
                System.out.println("你猜我运行吗???");
                ret = num1 / num2;
            } catch (ArithmeticException | NullPointerException e) {
                System.out.println("都是异常");
            } catch (Exception e) {
                System.out.println("Exception是所有异常的基类");
            }
            
            System.out.println("ret : " + ret);
        }
    }
    
    1.5 抛出异常
    关键字:
        throw 
            在代码中满足条件的情况下,抛出异常
        throws 
            在【方法声明】位置告知调用者,这里有哪些异常抛出
    
    package com.qfedu.a_throwable;
    
    /*
     * 抛出异常特征:
     *      1. 抛出异常就是一个高级版的参数合法性判断
     *      2. 代码中如果使用throw抛出指定异常,必须在代码声明位置告知调用者
     *      当前方法存在哪些异常抛出
     *      3. 异常从抛出位置开始,之后的代码就不再运行。
     *      4. 同一个代码块中不得抛出多个异常,如果代码需要抛出多个异常,需要执
     *      行不同的判断条件。
     *      5. 如果调用的方法存在抛出异常, 这里需要采用异常处理方式,
     *          a. 捕获异常
     *          b. 抛出异常
     *      NullPointerException
     *      ArrayIndexOutOfBoundException
     */
    public class Demo4 {
        public static void main(String[] args) 
                throws ArithmeticException, NullPointerException {
            try {
                test(10, 0, null);
            } catch (ArithmeticException | NullPointerException e) {
                System.out.println("当前代码存在异常问题");
            }
            
            test(10, 0, null);
        }
        
        /**
         * 方法功能概述
         * 
         * @param num1 参数1
         * @param num2 参数2
         * @throws ArithmeticException 当前方法抛出算术异常。
         * @throws NullPointerException 数组首地址不得为null
         */
        public static void test(int num1, int num2, int[] arr) 
                throws ArithmeticException, NullPointerException {
            // 在方法的声明位置告知调用者,该方法有哪些异常抛出。
            // 参数合法性判断
            /*
             * if (0 == num2) { System.out.println("Input Parameter is Invalid"); return; }
             */
            if (0 == num2) {
                // throw new 异常构造方法();
                throw new ArithmeticException("算术异常");
            }
            
            if (null == arr) {
                throw new NullPointerException("数组异常");
            }
            
            
            int ret = num1 / num2;
            System.out.println(ret);
        }
    }
    
    1.6 抛出和捕获使用情况图例
    image.png
    1.7 自定义异常
    Java中异常众多!!!
        也满足不了我们的日常!!!
    
    单身狗异常
    网线断了异常
        Java中现有异常无法满足,自定义异常玩一玩了!!!
    格式:
        class 自定义异常 extends Exception {
            // 无参数构造方法
            // 有参数构造方法
        }
        SingleDogException
        
    
    package com.qfedu.a_throwable;
    
    /**
     * 单身狗异常完毕!!!   
     *      错误日志记录
     * @author Anonymous
     *
     */
    class SingleDogException extends Exception {
        
        // 无参数构造方法
        public SingleDogException() {}
        
        /**
         * 带有Message异常信息参数的构造方法
         * 
         * @param message String类型异常信息
         */
        public SingleDogException(String message) {
            /*
             * 调用父类的String类型构造方法。
             * super()  
             *      就可以直接调用父类的构造方法,会根据实际参数来选择对应的
             *      构造方法执行。
             */
            super(message);
        }
    }
                      
    public class Demo5 {
        public static void main(String[] args) throws SingleDogException {
            try {
                buyOneFreeOne(true);
            } catch (SingleDogException e) {
                // TODO Auto-generated catch block
                System.out.println(e.getMessage());
            }
            
            buyOneFreeOne(true);
        }
        
        /**
         * 买一赠一
         * 
         * @param single boolean true 真·单身狗
         * @throws SingleDogException 单身狗异常
         */
        public static void buyOneFreeOne(boolean single) throws SingleDogException {
            if (single) {
                throw new SingleDogException("路见不平一声吼");
            }
            
            System.out.println("书亦烧仙草买一送一, 美团有券9.9RMB");
        }
    }
    
    

    相关文章

      网友评论

        本文标题:java基础-day14-异常和集合

        本文链接:https://www.haomeiwen.com/subject/qrvnyltx.html