JAVA小知识27:异常与异常处理全解

news2024/10/6 8:40:13

一、异常

异常就是代表程序出现了问题,像我们之前学数组的时候碰到的数组越界异常,以及空指针异常等等都属于开发中经常能碰到的异常。
我们学习异常不是为了在以后中避免异常,而是学习碰到了异常以后该如何的处理。

1.1、异常的分类

Java的类库从java.lang.Throwable类开始,它定义了所有类型的错误和超类。Throwable分为两个主要子类:ErrorException
在这里插入图片描述
Error:代表的系统级别错误(属于严重问题)系统一旦出现问题,sun公司会把这些错误封装成Error对象。Error是给sun公司自己用的,不是给我们程序员用的。因此我们开发人员不用管它。
Exception:叫做异常,代表程序可能出现的问题,我们通常会用Exception以及他的子类来封装程序出现的问题。
RuntimeException:RuntimeException及其子类叫运行时异常,编译阶段不会出现异常提醒,运行时出现的异常(如:数组索引越界异常)
Exception下其他异常编译阶段就会出现异常提醒的。(如:日期解析异常)

1.2、编译时异常以及运行时异常

什么叫编译时异常?

我们直接看这段代码

在这里插入图片描述
在这段代码中我们看到了一个红色波浪线,有点基础的都知道,如果不解决这个红色波浪线我们编译
肯定是不通过的,现在我们看看它报了什么错。

在这里插入图片描述

看,未处理异常,这种异常就是编译时异常,在编译阶段必须手动的处理,否则就会一直报错。

在这里插入图片描述那什么叫运行时异常呢?
在这里插入图片描述
这段代码中我们明确的知道数组是越界的,但是却不会给我报错,只有我们运行程序的时候才会报错。数组越界异常
在这里插入图片描述

我们总体看一下这两类异常
在这里插入图片描述

二、异常的作用

2.1、查看BUG的相关信息

我们来看下面这个代码:你觉得会报错吗?
在这里插入图片描述
会的,空指针异常,这里说arr.add("hello")是空指针,这里我们就能知道了,List集合不能这么创建。
在这里插入图片描述
再来看看这个代码:
在这里插入图片描述
通过异常我们能知道,其发生了越界的异常,能给我关键的信息。
在这里插入图片描述

2.2、查看底层情况

异常可以作为方法内部的一种特殊返回值,以便通知调用者底层的执行情况,有时候可以手动抛出异常来处理事件。

三、异常处理方案

3.1、虚拟机默认处理异常

异常的名称异常原因异常出现的位置等信息输出在了控制台,然后程序停止执行,下面的代码不会再执行了,来看下列代码:

public static void main(String[] args){
    List<String> arr = new ArrayList<String>();
    arr.add("hello");
    System.out.println(arr.get(0));
    System.out.println(arr.get(1));
    System.out.println(arr.get(0));
}

其执行结果为:
在这里插入图片描述

可以看到程序未出错之前的代码正常运行了,出错之后的没有运行。

3.2、手动处理异常

一般我们使用try...catch...来手动处理异常。他的作用是当try代码中出现了异常之后,不影响下面的代码运行。
在这里插入图片描述
我们再来看这段代码:

public static void main(String[] args){
    List<String> arr = new ArrayList<String>();
    arr.add("hello");
    System.out.println(arr.get(0));
    try {
        System.out.println(arr.get(1));
    }catch (IndexOutOfBoundsException e){
        System.out.println("索引越界");
    }
    System.out.println(arr.get(0));
}

其输出为:
在这里插入图片描述

我们可以看到程序正常的往下面运行了,他的原理也很简单,如果try里面代码块报错了,会new一个报错类型的对象,然后去catch参数里面的异常去比较,如果能接收,就会执行catch里面的代码。

四、try…catch

4.1、如果try中没有遇到问题,怎么执行?

正常运行,不会运行catch里面的代码

4.2、如果try中可能会遇到多个问题,怎么执行?

有多少个异常类型就捕获多少个异常类型,但是正常运行时候第一个问题发生的时候就不回继续运行try里面的代码了。
如果我们要捕获多个异常,并且这些异常中如果存在父子关系的话,那么父类一定要写在下面。

public static void main(String[] args){
    List<String> arr = new ArrayList<String>();
    arr.add("hello");
    List<String> arr1 = null;
    try {
        arr1.add("hello");
        System.out.println(arr.get(1));
    }catch (IndexOutOfBoundsException e){
        System.out.println("索引越界");
    }catch (NullPointerException n){
        System.out.println("空指针异常");//空指针异常
    }
    System.out.println(arr.get(0));//hello
}

4.3、如果try中遇到的问题没有被捕获,怎么执行?

没有捕获的话就相当于白写try…catch了,还是会调用JVM的异常处理,直接停止代码。

public static void main(String[] args){
    List<String> arr = new ArrayList<String>();
    arr.add("hello");
    List<String> arr1 = null;
    try {
        arr1.add("hello");
    }catch (IndexOutOfBoundsException e){
        System.out.println("索引越界");
    }
    System.out.println(arr.get(0));//hello
}

在这里插入图片描述

4.4、如果try中遇到了问题,那么try下面的其他代码还会执行吗?

不会,会直接生成异常对象交给catch捕获。

五、异常常见方法

异常常见有三种方法,这三种方法都是定义在Throwable类当中的。
在这里插入图片描述

public static void main(String[] args){
    List<String> arr = new ArrayList<String>();
    arr.add("hello");
    List<String> arr1 = null;
    try {
        arr1.add("hello");
    }catch (NullPointerException n){
        String message = n.getMessage();
        System.out.println("n.getMessage():"+message);//null
        String s = n.toString();
        System.out.println("n.toString():"+s);//java.lang.NullPointerException
        n.printStackTrace();//java.lang.NullPointerException at test.main(test.java:16)
    }
}

在这里插入图片描述
以上方法都不会停止JVM的运行

六、抛出异常

抛出异常有两个关键字 thorwsthorw
throws:写在方法定义处,表示声明一个异常。告诉调用者,使用本方法可能会有哪些异常
thorw:写在方法内,结束方法;手动抛出异常对象,交给调用者;方法中下面的代码不再执行了
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1842157.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

InPixio Photo Cutter v10 解锁版安装教程 (懒人抠图工具)

前言 InPixio Photo Cutter是一款懒人抠图工具&#xff0c;采用了增强的算法切割技术&#xff0c;可以在不影响图像质量的情况下&#xff0c;允许用户从照片中删除任何物体或人物&#xff0c;并且保持其完整的质量。你只需点击几下鼠标&#xff0c;便可从照片中剪下任何细节、…

Linux驱动开发(二)--字符设备驱动开发提升 LED驱动开发实验

1、地址映射 在编写驱动之前&#xff0c;需要知道MMU&#xff0c;也就是内存管理单元&#xff0c;在老版本的 Linux 中要求处理器必须有 MMU&#xff0c;但是现在Linux 内核已经支持无 MMU 的处理器了。 MMU的功能如下&#xff1a; 完成虚拟空间到物理空间的映射 内存保护&…

安卓手机删除的照片怎么恢复?3个方法,小技巧大作用

你是否曾经不小心删除了手机里的珍贵照片&#xff0c;却不知道怎么恢复&#xff1f;别担心&#xff0c;今天我们就来分享几个简单的小技巧&#xff0c;帮助你轻松找回那些丢失的照片。这些技巧虽然简单&#xff0c;但却能发挥大作用&#xff0c;让你不再为丢失照片而烦恼。手机…

delphi 如何使用TEdgeBrowser组件以及打包环境在其他主机上运行

不管开发环境还是第三方环境先安装运行时库&#xff1a;Microsoft Edge WebView2 | Microsoft Edge Developer 开发环境可以直接通过&#xff1a; delphi IDE安装 安装完毕后进入到指定路径&#xff0c;复制里面的WebView2Loader.dll到你要开发的程序根目录&#xff1a; 大致路…

南开大学漏洞报送证书【文尾有福利】

证书介绍 获取来源&#xff1a;edusrc&#xff08;教育漏洞报告平台&#xff09; url&#xff1a;教育漏洞报告平台(EDUSRC) 兑换价格&#xff1a;30金币​ 获取条件&#xff1a;南开大学任意中危或以上级别漏洞 证书规格&#xff1a;证书做了木框装裱&#xff0c;显得很高…

C++设计模式——Flyweight享元模式

一&#xff0c;享元模式简介 享元模式是一种结构型设计模式&#xff0c;它将每个对象中各自保存一份数据的方式改为多个对象共享同一份数据&#xff0c;该模式可以有效减少应用程序的内存占用。 享元模式的核心思想是共享和复用&#xff0c;通过设置共享资源来避免创建过多的实…

反激开关电源输入电解电容选型及计算

输入电解电容波形如下 计算 1、输入电解电容经验选取法 当输入电压为220V20%&#xff08;AC176-264V&#xff09;时 按照输出功率选取&#xff1a;W/μF 耐压&#xff08;400V&#xff0c;输入176-264V最高DC峰值373V&#xff09; 当输入电压为11020%时&#xff08;AC88-132V…

进销存系统哪个好?2024最新进销存系统推荐(持续更新中)

现在市面上的进销存系统太多了&#xff0c;企业的选择越多&#xff0c;越容易踩坑。那企业在选择进销存系统时&#xff0c;需要考虑哪些因素&#xff1f; 1、系统的适配性 在进行选择之前&#xff0c;就应该先清楚自己的企业是重财务流管理、还是生产业务流管理、还是销售订单…

NSSCTF-Web题目8

目录 [LitCTF 2023]Http pro max plus 1、题目 2、知识点 3、思路 [NSSCTF 2022 Spring Recruit]babyphp 1、题目 2、知识点 3、思路 [LitCTF 2023]Http pro max plus 1、题目 2、知识点 http数据包头部字段 3、思路 打开题目 第一想法就是加上X-forwarded-for字段 …

ABAP程序示例:交互式ALV演示程序

这个程序是一个用于显示和刷新事务代码&#xff08;TCode&#xff09;列表的报表程序。它使用ALV&#xff08;ABAP List Viewer&#xff09;来显示数据&#xff0c;并提供了一个刷新功能&#xff0c;以便用户可以查看新的事务代码。以下是程序的主要部分及其功能&#xff1a; 数…

拉普拉斯矩阵对称归一化理解,通过一个简单的例子进行说明

拉普拉斯矩阵&#xff08;Laplacian Matrix&#xff09;是一个与图相关的矩阵&#xff0c;通常用于图分析、机器学习和信号处理等领域。它是由图的邻接矩阵或关联矩阵计算得出的。 对于一个无向图 G ( V , E ) G(V,E) G(V,E)&#xff0c;它的拉普拉斯矩阵 L L L 可以表示为…

springBoot高校宿舍交电费系统-计算机毕业设计源码031552

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

大数据-数据分析师利用excel绘图

你会用excel&#xff0c;统计数据吗&#xff1f;我是大数据工程师&#xff0c;但是我不会excel。那咋办&#xff1f; 用sql&#xff0c;统计&#xff0c;导出到excel&#xff0c;在用excel统计。本文主要讨论的是导出到excel后&#xff0c;画图。 图是什么&#xff1f; x和y…

视频画面大小裁剪怎么弄?这3种剪辑方法轻松解决

视频画面大小裁剪怎么弄&#xff1f;视频画面大小裁剪&#xff0c;是视频编辑中常见且实用的操作之一。它不仅能帮助我们精准地去除视频中的多余内容&#xff0c;还能根据实际需求调整画面大小&#xff0c;使之适应不同的播放平台和场景需求。通过裁剪&#xff0c;我们可以让视…

WordPress主题 酱茄免费主题

酱茄free主题由酱茄开发的一款免费开源的WordPress主题&#xff0c;主题专为WordPress博客、资讯、自媒体网站而设计&#xff0c;遵循GPL V2.0开源协议发布。 运行环境 酱茄Free主题当前版本&#xff1a;2020.11.25 V1.0.0 支持WordPress版本&#xff1a;5.4 兼容Chrome、Fire…

git知识域

知识体系 FAQ git clone与git pull区别 git clone&#xff1a;从无到有&#xff0c;包含分支信息&#xff0c;日志信息。 git pull&#xff1a;在已有项目基础上操作&#xff0c;针对特定分支。

React实现H5手势密码

监测应用进入前后台 在JavaScript中,监听H5页面是否在前台或后台运行,主要依赖于Page Visibility API。这个API在大多数现代浏览器中都是支持的,包括苹果的Safari和谷歌的Chrome(也就基本覆盖了Android和iOS平台)。下面是一个简单的示例代码,展示如何使用这个API来判断页…

PFA托盘400*300*42mm耐酸碱透明聚四氟乙烯方盘方槽耐高温厂家供

PFA方盘又称托盘&#xff1a;耐高温、耐腐蚀。 进口透明可溶性聚四氟乙烯方盘。可应用于成膜实验&#xff0c;样品液体脱漏等。能放在电热板上直接加热使用&#xff0c;也可以用于烘箱烘干&#xff0c;实验室腐蚀性样品的转移和搬运&#xff0c;防止腐蚀性液体洒落。 产品特性…

【LLM之RAG】Self-RAG论文阅读笔记

研究背景 尽管大型语言模型&#xff08;LLM&#xff09;展示出了显著的能力&#xff0c;但它们在生成回答时经常包含事实错误&#xff0c;因为它们仅依赖于封装在模型中的参数知识。增强型检索生成&#xff08;Retrieval-Augmented Generation, RAG&#xff09;是一种方法&…

队列(数据结构篇)

数据结构之队列 队列(queue) 概念&#xff1a; 队列也是一种线性表&#xff0c;使用队列时插入在一端进行而删除则在另一端进行&#xff0c;队列的基本操作是入队&#xff0c;它是在表的末端(也叫做队尾)插入一个元素&#xff0c;出队&#xff0c;它是删除在**表的开头(**队…