IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Java异常体系的简单总结 -> 正文阅读

[Java知识库]Java异常体系的简单总结

目录

前言

一、异常概述

二、异常的处理

三、自定义异常


前言

???????hello,小伙伴们,好久不见了!今天这篇文章我想和大家聊一聊Java的异常类,相信学过Java的小伙伴对异常都不陌生。那么学过的小伙伴可以简单地看一看,当作温习;没有学过或者正在学的小伙伴就可以认真看一看,或许会对你有点启发和帮助。(*^▽^*)


一、异常概述

1.什么是异常?

? ? ? ?异常指的是程序出现了不正常的情况

???????比如,ArrayIndexOutOfBoundsException(数组索引越界异常:指定的索引值超过了数组长度<嘻嘻嘻,很多才开始学Java的小伙伴都遇到过这个问题吧?>)、ClassCastException(强制类型转换异常:代码尝试将对象转换为不属于实例。比如你将一个猫类对象强制转换为狗类对象就会报此异常)等等。

2.异常的体系结构

? ?Error:严重问题,不需要处理
? ?Exception:称为异常类,它表示程序本身可以处理的问题

  • RuntimeException:在编译期是不检查的,出现问题后,需要我们回来修改代码
  • 非 RuntimeException:编译期就必须处理的,否则程序不能通过编译,就更不能正常运行了

3.编译时异常和运行时异常的区别

? ? Java 中异常被分为两大类:编译时异常运行时异常,也被称为受检异常非受检异常
? ? 所有的 RuntimeException 类及其子类被称为运行时异常,其他的异常都是编译时异常。

  • 编译时异常:必须显示处理(也就是必须手动处理,处理方案参考下文),否则程序发生错误,无法通过编译。
  • 运行时异常:无需显示处理,也可以和编译时异常一样处理。

二、异常的处理

1.JVM的默认处理方案(自动处理)

???????如果程序出现了问题,我们没有做任何处理,最终JVM 会做默认的处理,处理方式有如下两个步骤:

  1. 把异常的名称、原因、位置等信息输出在控制台。
  2. 结束程序的运行。?

???????一般运行时异常我们可以不用管,让JVM自动处理就行(如果想让程序不终止继续运行,也需要进行显示处理);但是对于编译时异常,JVM的默认处理方案是行不通的,我们必须进行显示(手动)处理,下面我就介绍两种显示处理方案:try...catch throws

2.异常处理之 try...catch...

???????try...catch 显示处理方案最大的好处就是如果产生了异常,它也不会使程序终止掉,输出异常信息后程序会继续运行。

? 1)定义格式

try {
	可能出现异常的代码;
} catch(异常类名 变量名) {
	异常的处理代码;
}

? 2)执行流程
???????程序从 try 里面的代码开始执行。出现异常,会自动生成一个异常类对象,该异常类对象将被提交给 Java 运行时系统

???????当 Java 运行时系统接收到异常对象时,会到 catch 中去找匹配的异常类,找到后进行异常处理。执行完毕之后,程序还可以继续往下执行。

? 3)示例代码

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]);
            System.out.println("这里能够访问到吗");
        } catch (ArrayIndexOutOfBoundsException e) {
//            System.out.println("你访问的数组索引不存在,请回去修改为正确的索引");
            e.printStackTrace();
        }
    }
}

3.异常处理之 throws

???????有些时候我们不想使用 try-catch 或没有权限使用 try-catch 方式处理异常时,可以选择 throws 抛出的方式。不过 throws 只是一种暂时的处理异常的方式,最终调用方法时还是要使用 try...catch 处理。

? 1)定义格式

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

? 2)示例代码

public class ExceptionDemo {
    public static void main(String[] args) {
        System.out.println("开始");
//        method();
        try {
            method2();
        }catch (ParseException e) {
            e.printStackTrace();
        }
        System.out.println("结束");
    }

    //编译时异常
    public static void method2() throws ParseException {
        String s = "2048-08-09";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date d = sdf.parse(s);
        System.out.println(d);
    }

    //运行时异常
    public static void method() throws ArrayIndexOutOfBoundsException {
        int[] arr = {1, 2, 3};
        System.out.println(arr[3]);
    }
}

? 3)注意事项

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

  • 编译时异常必须要进行处理,两种处理方案:try...catch …或者 throws,如果采用 throws 这种方案,将来谁调用谁处理。

  • 运行时异常可以不处理,出现问题后,需要我们回来修改代码。

三、自定义异常

1.Throwable 常用成员方法

介绍自定义异常之前先给大家介绍Throwable类的常用成员方法,主要有以下三个:?

  • getMessage():返回产生异常的原因。
  • toString():返回异常的名称以及产生异常的原因。
  • printStackTrace():把异常的名称、产生异常的原因以及异常位置信息输出在控制台。

2.自定义异常

???????有些时候Java提供的异常类可能满足不了我们实际的开发需求,那么这时我们就需要自定义异常类。自定义异常类非常简单,只需要用extends关键字继承Exception类就可以把我们自己定义的异常类加入到Java异常体系中。

? 1)定义格式

??

? 2)示例代码

> 自定义异常类

public class ScoreException extends Exception {

    public ScoreException() {}

    public ScoreException(String message) {
        super(message);
    }

}

> 老师类

public class Teacher {
    public void checkScore(int score) throws ScoreException {
        if(score<0 || score>100) {
//            throw new ScoreException();
            throw new ScoreException("你给的分数有误,分数应该在0-100之间");
        } else {
            System.out.println("成绩正常");
        }
    }
}

> 测试类

public class Demo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入分数:");

        int score = sc.nextInt();

        Teacher t = new Teacher();
        try {
            t.checkScore(score);
        } catch (ScoreException e) {
            e.printStackTrace();
        }
    }
}

3.Throws 和 throw 的区别

???????上面的自定义异常示例代码中有一个关键字 throw ,它抛出了一个异常对象。那么它和 throws 究竟有什么区别呢?博主给大家已经整理好了:


ps:博主创作不易,喜欢这篇文章的小伙伴们给个赞吧!??( ′・?・` )比心

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-11 18:40:35  更:2021-09-11 18:41:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:01:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码