day049:异常、throws声明异常、throw抛出异常、异常的处理方式

2023-10-30

接下节:day050:try...catch...常见问题、throwable的成员方法、自定义异常_ZQyyds:)的博客-CSDN博客

一、异常

1.什么是异常?

指程序出现了不正常的情况,程序在执行过程中,出现的非正常情况,最终会导致JVM的非正常停止。

注:语法错误不属于异常体系中。(例如关键字大小写出错)

2.异常体系

运行时异常:例如空指针异常、数组索引越界异常等

编译时异常:例如日期格式化异常、解析异常等

3.编译时异常与运行时异常

  • 编译时异常:是指在编译成class文件时必须要处理的异常,也称为受检异常
  • 运行时异常:是指在编译成class文件不需要处理,在运行字节码文件时可能出现的异常,也成为非受检异常 

4.JVM默认处理异常的方式(异常的第一种处理方式)

  • 把异常的名称、异常原因以及异常出现的位置等信息输出在控制台
  • 将程序停止运行,哪里有异常就在哪里停止

5.throws 异常类名; :

throws 异常类名;

写在方法的定义处(小括号与大括号之间),表示声明一个异常。告诉调用者,如果调用这个方法,可能会出现xx异常,如果该方法没出现异常,则程序正常运行,若出现异常,则将该异常交给调用者处理。

public class exceDemo_01 {
    //使用throws声明异常
    public static void main(String[] args) throws ArrayIndexOutOfBoundsException {
        //交给调用者处理,而main方法的调用者是JVM虚拟机,所以还是会以JVM默认处理异常
        extracted();
    }

    private static void extracted() {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println(arr[10]);
    }
}

 (注:如果声明的异常是一个运行时异常(例如空指针异常、数组索引越界异常等),则声明的代码可以省略不写,即throws ArrayIndexOutOfBoundsException可以不写;如果声明的异常是一个编译时异常(例如日期格式化异常、解析异常等),则声明的代码必须手动写出

6.throw抛出异常、异常的第二种处理方式

(1)抛出异常的意义:

  • 在方法中,当传递的参数有误,没有继续运行下去的意义了,则采取抛出处理,表示让该方法结束运行
  • 告诉调用者方法中出现了问题

代码示例:

public class exceDemo_02 {
    public static void main(String[] args) {
        // int [] arr={1,2,3,4,5,6};
        int[] arr = null;
        printArr(arr);//调用者接收异常,再进行处理,若自己没有处理,则继续向上抛给调用者JVM虚拟机
    }

    private static void printArr(int[] arr) {
        if (arr == null) {
            throw new NullPointerException();//当参数为null时,手动创建一个异常对象,抛给调用者
        } else {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
}

(2)异常的第二种处理方式(try、catch)

格式:

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

优点:使用try、catch,即使代码有异常,也可以使代码继续运行下去

代码示例:

public class exceDemo_03 {
    public static void main(String[] args) {
        // int [] arr={1,2,3,4,5,6};
        int[] arr = null;
        //使用try...catch...方式处理异常
        try {
            //可能出现异常的代码
            printArr(arr);

        }//异常类名,变量名
        catch (NullPointerException exception) {
            System.out.println("参数不能为null");
        }
        System.out.println("使用try、catch,代码可以继续运行下去");
    }

    private static void printArr(int[] arr) {
        if (arr == null) {
            throw new NullPointerException();
        } else {
            for (int i = 0; i < arr.length; i++) {
                System.out.println(arr[i]);
            }
        }
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

day049:异常、throws声明异常、throw抛出异常、异常的处理方式 的相关文章

随机推荐

  • 雅思口语 九月新题 答案

    目录 你大概多长时间练习一次编程 你为什么选择这个专业 What are your career goals in the field of software engineering What sparked your interest i
  • uniapp-h5中的文件流下载和指定的url下载总结(解决下载后的pdf打开空白情况)

    uniapp h5中的文件流下载和指定的url下载总结 解决下载后的pdf打开空白情况 一 uniapp h5文件流下载 场景 之所以会有文件流需求 前端给到一些水印内容 然后后台会给文件加上我们给到的水印并以文件流形式返回 这里以pdf格
  • 汇编语言之字符串的比较和查找

    汇编语言之字符串的比较和查找 基础知识 串比较指令涉及两个串 目的串地址为ES DI 源串地址为DS SI 操作如下 1 字节 CMPSB 操作 ES DI DS SI DI 1 SI 1 2 字 CMPSW 操作 ES DI DS SI
  • python django(一)学习笔记之二 (python读取EXCL在html展示)

    利用EXCL的数据 进行一个饼状的分析图 直接了当的看出在市场的份额的占比多少 承接第一天的内容和开发环境 以及目录 在settings py 中 加入 INSTALLED APPS ch01 apps Ch01Config django
  • Docker安装操作常用服务器软件

    1 查看centos版本 rpm q centos release 2 更新yum yum update y 3 删除以前版本的docker yum remove docker docker client docker client lat
  • k8s 证书生成 cfssl

    命令下载工具 傻瓜式执行 wget https pkg cfssl org R1 2 cfssl linux amd64 wget https pkg cfssl org R1 2 cfssljson linux amd64 wget ht
  • Verdi实现信号的平移

    在Verilog System verilog中 xxx可以实现延迟指定时间的功能 而在使用verdi查看信号波形并进行分析时 同样也可以实现类似的功能 注 这种信号平移是有其应用场景的 例如 在某些仿真模型中 为了模拟实际的信号延迟 信号
  • 极光笔记

    随着全球化进程的深入 跨境数据传输与存储问题已经变得愈发重要 推送服务的数据中心节点选择不仅关乎数据访问速度和用户体验 同时也直接牵扯到数据合规性和安全保障 EngageLab Push深知这一点 为了满足更多国际客户和全球用户触达需求 我
  • java resultset获取列数_Java语言如何获取ResultSet的行数和列数

    ResultSet接口表示在数据库的数据表中查询的结果集 ResultSet 对象具有指向其当前数据行的指针 最初 指针被置于第一行之前 Java没有提供直接返回ResultSet行数的函数 或方法 如果想知道ResultSet的行数 有以
  • 图像去噪的快速入门学习

    1 理论基础 数学基础 高等数学 线性代数 概率统计 矩阵论 数值分析等 信号处理 统计信号处理 统计学习理论等 2 文献资料阅读 常用的数据库 IEEE IEE Electronic Library Elsevier SpringerLi
  • Python(4) Numpy,控制台完全输出ndarray

    import numpy as np np set printoptions threshold np nan print ndarray 当ndarray里面的存放的数据维度过大时 在控制台会出现不能将ndarray完全输出的情况 中间部
  • NDIS网络数据监控程序NDISMonitor(3)-----NdisMonitro应用程序(C#)

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家拍砖 1 主窗口Load函数ctrlForm Load 1 先调用GetExtensions来获得运行目录下bin目录中的所有文件 通过载入为A
  • 【maven】The forked VM terminated without saying properly

    1 概述 转载 https blog csdn net zhglance article details 53695653 一直在使用Maven开发项目 最近遇到了一个让人头疼的问题 在网上搜索竟然没有找到中文描述的解决方式 自己找了英文网
  • linux内核中GPIO的使用(一)--IO内存

    一 相关概念 使用IO内存将物理地址映射为虚拟地址 再通过对虚拟地址的操作来控制硬件 所谓的IO内存是指一种编址方式 不同cpu平台使用的编址方式不同 一种是 IO内存 方式 也叫统一编址方式 是指内存和外设的地址是在同一个地址空间上的 如
  • 手把手教你使用Segformer训练自己的数据

    使用Segformer训练自己的数据 系统配置 代码链接 针对MMCV 选择系统 Windows环境要求 ubuntu 18 04 安装swin segmentation 制作VOC 数据集 代码部分修改 开始训练 使用Transforme
  • mysql实时监控工具mytop

    mysql实时监控工具mytop mytop类似于linux top工具 可以实时监控mysql服务器的性能信息 安装依赖 yum install y perl CPAN cpan cpan gt install DBI cpan gt i
  • vmwaeESXi导出虚拟机和安装

    找到你要导出的虚拟机点击 操作 选择导出 点击 导出 导出的文件会通过浏览器下载到本地 点击创建 注册 选择 从OVF或OVA文件部署虚拟机 点下一页 输入 虚拟机名称 然后点击 单机以选择文件或拖放 以下三个文件就是导出的虚拟机 将三个文
  • docker学习:实战commit

    这里的commit是把你修改后的一个容器打包成一个镜像 这样你本地就多了一个image镜像 有什么用呢 就是你在之前的镜像上的修改连同镜像 成为一个新的image 下次你去布置启动这个修改后的镜像就不用 先下载一个镜像再修改 直接拿你这次c
  • 正则表达式作业

    利用正则表达式完成下面的操作 一 不定项选择题 能够完全匹配字符串 010 62661617 和字符串 01062661617 的正则表达式包括 ABD A r d 3 d 8 B r 0 9 C r 0 9 d D r d d 能够完全匹
  • day049:异常、throws声明异常、throw抛出异常、异常的处理方式

    接下节 day050 try catch 常见问题 throwable的成员方法 自定义异常 ZQyyds 的博客 CSDN博客 一 异常 1 什么是异常 指程序出现了不正常的情况 程序在执行过程中 出现的非正常情况 最终会导致JVM的非正