• 异常总结


    异常:
    * 编译时异常: 需要定义类继承自Exception
    * 格式: public class 类名 extends Exception{...}
    *
    * 运行时异常: 需要定义类继承自RuntimeException
    * 格式: public class 类名 extends RuntimeException{...}

    * 在java中所有的错误或者是异常都可以使用一个类来表示: java.lang.Throwable;
    * 里面有很常用的三个类来表示:
    * Error: 表示错误的信息,一旦出现程序立即停止
    * Exception: 表示异常(编译时的异常)的信息,一旦出现处理完程序正常运行.
    * RuntimeException: 表示运行时候的信息,是Exception的子类.

    // 1. Error: 表示错误的信息,一旦出现程序立即停止
    // int[]array = new int[1000000000];

    // 2. Exception表示异常(编译时的异常)的信息,一旦出现处理完程序正常运行.
    // FileReader fr = new FileReader("abc.txt");

    // 3. RuntimeException: 表示运行时候的信息,是Exception的子类.

    * 异常的解析流程:
    * 1. 一旦程序出现异常,JVM自动创建异常类的对象(如果是自定义的异常需要手动创建)
    * 2. 一旦检测到异常产生,JVM就会马上抛出异常,(如果是自定义的异常需要手动抛出)
    * 3. 接下来需要处理抛出来的异常,有两种方式:
    * 方式一: 使用关键字throws 抛
    * 格式: public static void method() throws 异常类名{...}
    *
    * 方式二: 使用try_catch的方式处理(真处理)
    * 格式:
    * try{
    * //编写有可能出现问题的代码
    * }catch(异常类名 变量名){
    * //处理方式,是一种预案
    * }

    * 如果自定创建一个异常类对象,该如何抛出,需要使用到关键字throw
    * throw: 主动将产生的对象进行抛出
    * 格式: throw 异常对象;
    如:

    public class Demo04ExceptionThrow {
    public static void main(String[] args) {
    
    int []array = {1,2,3,4,5};
    
    int number = getElement(array, 20);
    
    System.out.println("number = " + number);
    }
    
    public static int getElement(int[]array , int index){
    
    // 判断数组是否为空
    if(array == null){
    NullPointerException kong = new NullPointerException("你传的数组是空地");
    throw kong;
    }
    
    // 判断数组的索引是否越界了
    if(index < 0 || index>=array.length){
    ArrayIndexOutOfBoundsException yuejie = new ArrayIndexOutOfBoundsException("索引越界异常了:"+index);
    throw yuejie;
    //throw new ArrayIndexOutOfBoundsException("索引越界异常了:"+index);
    }
    
    return array[index];
    }
    }
    

      

    * 检测到异常之后的处理方式,有两种:
    * 方式一: 使用关键字throws, 声明抛出的异常
    * 格式: public static void method(参数)throws 异常类名{...}
    *
    * 方式二: 使用try_catch的方式
    * try{
    * // 用来编写可能出现问题的代码
    * }catch(异常类名 对象名){
    * // 处理异常的一种方式,预案
    * }finally{
    * // 一般不管怎么样都会执行的,用来使用释放资源
    * }

    package cn.itcast.demo03;
    /*
    * 方式二: 使用try_catch的方式
    * try{
    * // 用来编写可能出现问题的代码
    * }catch(异常类名 对象名){
    * // 处理异常的一种方式,预案
    * }finally{
    * // 一般不管怎么样都会执行的,用来使用释放资源
    * } 
    * 
    * try: 用来编写可能出现问题的代码
    * catch: 处理异常的一种方式,预案,不一定会执行
    * finally: 一般不管怎么样都会执行的,用来使用释放资源
    */
    
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    
    public class Demo05ExceptionTryCatch {
    
    public static void main(String[] args) {
    
    FileReader fr = null;
    
    try {
    // 1.创建FileReader对象,绑定源文件
    fr = new FileReader("abc1.txt");
    
    // 2.读取文件内容
    int ch = fr.read();
    
    } catch (IOException e) {// IOException e = new IOException();
    
    System.out.println("我正在拼命的处理异常.....");
    //e.printStackTrace();// 打印异常信息
    
    } finally{
    System.out.println("finally中的代码执行了....");
    // 3.关闭流
    if(fr != null){
    try {
    fr.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    
    
    System.out.println("程序结束了......");
    }
    }
    

      


    *
    * 注意点:
    * 1. 在使用throws声明抛出异常的时候,如果异常之间存在继承关系,只需要写父类异常即可.
    * 2. 如果有多个异常,不存在继承关系,可以使用逗号隔开.


    * 在使用try_catch处理异常的时候,根据实际情况还有几种格式:
    * 1. try_catch结构中,如果出现类多个异常,想要一种处理方式,异常之间不存在继承关系,可以在catch中并列写出多个异常
    * 格式: try{}catch(异常类名 A | 异常类名B 变量名){}finally{...}
    *
    * 2. try_catch结构中,如果出现多个异常存在继承关系,大的异常需要写在后面,并且希望单独去处理每一个异常,使用多个catch
    * 格式: try{}catch(异常类名A 变量名A){...}catch(异常类名B 变量名B){...}....
    *
    * 3. try_catch结构中,可以省略catch,确认没有什么异常要抓取,可以省略掉catch,配合finally
    * 格式: try{}finally{}
    *
    * 4. try_catch结构中,可以没有finally.一般对于没有什么资源想要释放的.
    * 格式: try{}catch(异常类名 变量名){}
    *
    * 5. try_catch结构中,任何结构中不能省略try, 并且不能只有try




    * 在继承结构体系中,如果子类重写了父类的方法,异常该如何处理
    * 1. 如果父类方法没有异常, 那么子类中出现了异常不能抛(throws), 只能try.(父亲不坏, 儿子不能坏)
    * 2. 父类中如果方法有异常, 子类中的异常和父类中异常如果有继承关系,那么不能大于父类异常.(父亲坏, 而不能更坏)
    * (实际使用场景,父类什么异常子类什么异常就好了.)

    人生就像一场路途,尝遍酸甜苦辣,方知人生苦甜.
  • 相关阅读:
    使用Navicat for Oracle工具连接oracle
    ArcGIS中的坐标系统定义与投影转换(转)
    随鼠标移动在状态栏实时显示地图坐标(转载)
    SQL Server 2014 中废止的数据库引擎功能
    sql server 对已有数据的表,添加核查约束 [失败],请使用with nocheck 子句
    一次性预览多张图片时遇到的问题
    vue中注册多个全局过滤器
    关于vue-cli本地项目启动,手机端无法访问题(有可能是360安全卫士作的妖)
    关于vuex中mapActions传参小tips
    javaScript知识梳理String篇
  • 原文地址:https://www.cnblogs.com/zennon/p/8127984.html
Copyright © 2020-2023  润新知