栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

异常体系详解

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

异常体系详解

异常的概述:

异常就是程序出现了不正常的情况,用来描述代码中出现的问题的,语法错误不是异常体系。

异常的体系结构:
  • Throwable
    • 包含Error和Exception
    • Error:严重错误,程序无法解决的问题
    • Exception:异常类,分为编译时异常和运行时异常两部分
  • 编译时异常
    • 除了RuntimeException类及其子类之外的所有异常

    • 必须显示处理,否则程序就会发生错误,无法通过编译

  • 运行时异常
    • RuntimeException类及其子类

    • 无需显示处理,也可以和编译时异常一样处理

JVM默认处理异常的方式:
  • JVM默认处理的两个步骤:
    • 把异常的名称,错误原因及异常出现的位置等信息输出在了控制台

    • 程序停止执行

查看异常信息:
  • 控制台在打印异常信息时,会打印异常类名,异常出现的原因,异常出现的位置
  • 可以根据提示,找到异常出现的位置,分析原因,修改异常代码
throws方式处理异常:
  • 声明一个异常
  • 格式

        public void 方法() throws 异常类名 {...}

  • 注意
    • 这个throws格式是跟在方法的括号后面的

    • 编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,在方法上进行显示声明,将来谁调用这个方法谁处理

    • 运行时异常因为在运行时才会发生,所以在方法后面可以不写,运行时出现异常默认交给jvm处

  • 示例代码
    //编译时异常,声明出来,谁调用谁处理
    public static void method1() throws ParseException {
        String s = "2048-08-09";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = sdf.parse(s);
        System.out.println(d);
    }
    
    ​
    //运行时异常-索引越界,编译不检查。
    //可以用不用声明,JVM调用使用默认处理
    public static void method2() throws ArrayIndexOutOfBoundsException {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
throw抛出异常:
  • 格式

    throw new 异常();

  • 注意

    这个格式是在方法内的,表示当前代码手动抛出一个异常,下面的代码不用再执行了

  • throws和throw的区别
    throwsthrow
    用在方法声明后面,跟的是异常类名用在方法体内,跟的是异常对象名
    表示声明异常,调用该方法有可能会出现这样的异常表示手动抛出异常对象,由方法体内的语句处理
  • 示例代码
    public class ExceptionDemo1 {
        public static void main(String[] args) {
            int [] arr1 = {1,2,3,4,5};
            int [] arr2 = null;
    
            //正常遍历
            printArr(arr1);
            //接收到一个异常,需要自己处理
            //没有处理,交给虚拟机默认处理
            printArr(arr2);
        }
    ​
        private static void printArr(int[] arr) {
            if(arr == null){
                System.out.println("参数不能为null");
                //当参数为null的时候,手动创建了一个异常对象
                throw new NullPointerException();                                             
            }else{
                for (int i = 0; i < arr.length; i++) {
                    System.out.println(arr[i]);
                }
            }
        }
    ​
    }
try-catch方式处理异常:
  • 格式
    try {
        可能出现异常的代码;
    } catch(异常类名 变量名) {
        异常的处理代码;
    }
  • 执行流程
    • 程序从 try 里面的代码开始执行

    • 出现异常,就会跳转到对应的 catch 里面去执行,执行完毕之后,程序还可以继续往下执行

  • 示例代码
    public class ExceptionDemo01 {
        public static void main(String[] args) {
            System.out.println("开始");
            method();
            System.out.println("结束");
        }
    ​
        public static void method() {
            try {
                int[] arr = {1, 2, 3};
                //打印不存在的索引,产生异常
                System.out.println(arr[3]);
    
            } catch (ArrayIndexOutOfBoundsException e) {
                //catch处理完毕,程序可继续运行
                System.out.println("你访问的数组索引不存在");
            }
        }
    }
  • 注意
    • 如果 try 中没有异常,会把try中的代码全部执行,不会执行catch里面的代码

    • 如果遇到了异常,跳转到对应的catch语句中,当catch里面的语句全部执行完毕,表示整个体系全部执行完全,继续执行下面的代码

    • 如果出现的问题没有捕获,那么异常没有处理, 默认交给虚拟机处理.

    • 同时有可能出现多个异常,就写多个catch,如果多个异常之间存在子父类关系,那么父类一定要写在下面。

Throwable成员方法:
  • 常用方法
    方法名说明
    public String getMessage()返回此 throwable 的详细消息字符串
    public String toString()返回此可抛出的简短描述
    public void printStackTrace()把异常的错误信息输出在控制台
  • 示例代码
    public class ExceptionDemo02 {
        public static void main(String[] args) {
            System.out.println("开始");
            method();
            System.out.println("结束");
        }
    ​
        public static void method() {
            try {
                int[] arr = {1, 2, 3};
                System.out.println(arr[3]); 
    
            } catch (ArrayIndexOutOfBoundsException e) { 
                //详细消息字符串
                System.out.println(e.getMessage());
                //Index 3 out of bounds for length 3
    ​
                //简短描述
                System.out.println(e.toString());
                //java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    ​
                //错误信息
                e.printStackTrace();
                //java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
                //at com.itheima_02.ExceptionDemo02.method(ExceptionDemo02.java:18)
                //at com.itheima_02.ExceptionDemo02.main(ExceptionDemo02.java:11)
    ​
            }
        }
    }
自定义异常:
  • 概述

    当Java中提供的异常不能满足我们的需求时,我们可以自定义异常

  • 实现步骤
    • 定义异常类

    • 写继承关系

    • 提供空参构造

    • 提供带参构造

  • 创建异常类
    public class 异常类名 extends RuntimeException {
        public 异常类名() {
        }
    ​
        public 异常类名 (参数) {
            super(参数);
        }
    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585167.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号