Java异常情况了解

news2024/11/23 15:37:29

作者:爱塔居的博客_CSDN博客-JavaSE,数据结构领域博主

专栏:JavaSE

作者介绍:大三学生,希望一起进步~

文章目录

目录

文章目录

一、异常结构体系

二、异常分类

三、异常处理

 3.1异常抛出

3.2 异常捕获

四.【面试题】

五、题目练习


一、异常结构体系

在Java中,将程序执行过程中发生的不正常行为称为异常。

 Error:Java虚拟机无法解决的严重问题,比如JVM的内部错误、资源耗尽。

 Exception:程序员可以通过代码处理的问题。

🎂简单来说,Error没得救,Exception有救。

二、异常分类

异常分为两种:

1.编译时异常(受检查异常):编译器要求强制处理

2.运行时异常(非受检查异常):编译器不要求强制处理异常

RunTimeException以及其子类对应的异常,都称为运行时异常。

 

🍓我们要注意,编译时出现的语法性错误不能成为异常,比如将System.out.println拼写成system.out.println,属于“编译器”出错,不是异常。

三、异常处理

在Java应用程序中,异常处理机制为:抛出异常、捕捉异常。

异常处理通过5个关键字来实现:try、catch、finally、throw、throws

 

 3.1异常抛出

在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。

public class test {
        public static int getElement(int[]array,int index){
            if(null==array){
                throw new NullPointerException("传递的数组为null");
            }if(
                    index< 0||index>=array.length){
                throw new ArrayIndexOutOfBoundsException("传递的数组下标越界");
            }
            return array[index];
        }
        public static void main(String[]args){
           // int[]array={1,2,3};//①
           //getElement(array,3);//①
           int[]array=null;//②
           getElement(array,3);//②
        }
}

 第一种情况抛出异常:

 第二种情况抛出异常:

 

注意点:

1. throw必须写在方法体内部
2. 抛出的对象必须是Exception 或者 Exception 的子类对象
3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处理,直接交给JVM来处理
4. 如果抛出的是编译时异常,用户必须处理,否则无法通过编译
5. 异常一旦抛出,其后的代码就不会执

3.2 异常捕获

🍡try-catch-finally

正常情况下, finall代码是一定会被执行到的:

 🍨throws

处在方法声明时参数列表之后,当方法中抛出编译时异常,用户不想处理该异常,此时就可以借助throws将异常抛给方法的调用者来处理。即当前方法不处理异常,提醒方法的调用者处理异常

语法格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型1,异常类型2...{
}

【注意事项】
1. throws必须跟在方法的参数列表之后
2. 声明的异常必须是 Exception 或者 Exception 的子类
3. 方法内部如果抛出了多个异常,throws之后必须跟多个异常类型,之间用逗号隔开,如果抛出多个异常类型具有父子关系,直接声明父类即可。
问题:既然 finally 和 try-catch-finally 后的代码都会执行,那为什么还要有finally呢?
finally中的代码一定会执行的,一般在finally中进行一些资源清理的扫尾工作


四.【面试题】


1. throw 和 throws 的区别?

①throw用于方法内部,throws用于方法声明上

②throw后跟异常对象,throws后跟异常类型

③throw后只能跟一个异常对象,throws后可以一次声明多种异常类型

2. finally中的语句一定会执行吗?

当发生代码流程并未进入try语句块、使用了 System.exit(int) 退出程序、程序所在的线程死亡、其它非正常退出等4种情况时,不会执行finally的语句。

五、题目练习

1.关于Java的异常处理机制的叙述哪些正确?

A.如果程序发生错误及捕捉到异常情况了,才会执行finally部分

B.其他选项都不正确

C.当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序

D.catch部分捕捉到异常情况时,才会执行finally部分

解析:正常情况都会执行finally部分。try发生异常,被catch捕捉到才会执行catch程序

2.在异常处理中,如释放资源,关闭数据库、关闭文件应由( )语句来完成。

A.try子句

B.catch子句

C.finally子句

D.throw子句

 解析:finally进行一些资源清理的扫尾工作

 3.下面有关JAVA异常类的描述,说法错误的是?

A. 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception

B.非RuntimeException一般是外部错误(非Error),其必须被 try{}catch语句块所捕获

C. Error类体系描述了Java运行系统中的内部错误以及资源耗尽的情形,Error不需要捕捉

D.RuntimeException体系包括错误的类型转换、数组越界访问和试图访问空指针等等,必须被 try{}catch语句块所捕获

 解析:RuntimeException可以不被try{}catch语句块捕获

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

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

相关文章

大数据必学Java基础(一百一十九):Maven仓库与JDK的配置

文章目录 Maven仓库与JDK的配置 一、Maven仓库 二、JDK的配置 Maven仓库与JDK的配置 一、Maven仓库 Maven仓库是基于简单文件系统存储的,集中化管理Java API资源(构件)的一个服务。 仓库中的任何一个构件都有其唯一的坐标,根据这个坐标可以定义其在仓库中的唯一存储路…

Linux:gcc工具

文章目录一.程序的翻译二.gcc工具的使用2.1gcc 文件名(直接编译)2.2gcc -o 自定义 原文件(自定义生成可执行程序名称)2.3./可执行文件2.4gcc -E(程序运行到预处理后结束)2.5gcc -S(程序运行到编译之后结束)2.6gcc -i(程序运行到汇编之后结束)2.7小结三.链接的过程3.1ldd命令3.2…

2023年最新谷歌Google帐号Gmail邮箱账号怎么注册成功的方法与教程?

因为工作、游戏或其他需求&#xff0c;有时需要使用谷歌Google帐号或Gmail邮箱账号。首先明确&#xff1a;谷歌google帐号不一定是Gmail邮箱帐号&#xff0c;但是Gmail邮箱账号一定是谷歌帐号。所以&#xff0c;大家注册Google谷歌帐号时默认为谷歌Gmail邮箱帐号就可以满足谷歌…

Linux基础命令,常用操作

Linux基础命令Linux的目录结构ls命令(list)隐藏文件、文件夹pwd命令(print work directory)cd命令(change directory)HOME目录相对路径、绝对路径特殊路径符mkdir命令(make directory)touch命令(touch)cat命令more命令cp命令mv命令rm命令(remove)which命令find命令grep命令wc命…

私有云建设,ALLINONE还是分层自主建设优化?

新钛云服已累计为您分享720篇技术干货私有云建设有两种思路&#xff0c;一种是使用整合解决方案&#xff0c;即ALLINONE的思路。一种是将私有云分层每层自主建设&#xff0c;使用不同的产品和解决方案分层优化组合使用。两种思路各有优缺点&#xff0c;适合不同的场景。一、ALL…

Mybatis-plus(上)

1.什么是mybatis-plus升级版的mybatis&#xff0c;目的是让mybatis更易于使用&#xff0c; 用官方的话说“为简化而生”官网&#xff1a;https://baomidou.com/初体验按照官网中的快速开始即可1.准备数据库脚本数据库 Schema 脚本如下&#xff1a; DROP TABLE IF EXISTS user; …

javaWeb RequestResponse

Request Request 继承体系 Tomcat解析请求数据&#xff0c;封装为request对象&#xff0c;并且创建request对象传递到service方法中 。Java提供了接口&#xff0c;tomcat的RequestFacade提供了实现。 Request 获取请求数据 请求数据分为3部分&#xff1a; 请求行&#xff…

一台手机即可完成 3D 建模,功能有多强大? #Luma AI

AIGC 的出现拓展了内容生产的诸多可能&#xff0c;借助 AI 技术来进行 3D 建模&#xff0c;可以节省不少的时间&#xff0c;市面上也出现了许多功能强大的 3D 建模工具。1 月 9 日&#xff0c;AppStore 上架了一款名为“Luma AI”的软件&#xff0c;能够将现实中的 2D 照片快速…

通过Terraform创建GCP Pubsub

1 简介 Terraform是管理许多平台的基础设施的工具&#xff0c;如AWS、GCP和Azure。这篇文章将讲解如何通过Terraform来管理GCP Pub/Sub。 创建GCP项目请参考&#xff1a;初始化一个GCP项目并用gcloud访问操作 2 Terraform创建Pub/Sub 2.1 下载Terraform插件 我们需要安装G…

【Blende UV映射01】创建UV 使用UV贴图处理纹理

写在前面 这是进行云渲染的最后一步&#xff0c;实践&#xff01;&#xff01; 会跟着这个Blender 2.8 UV Mapping教程快速学习一边UV映射的东西&#xff0c;已经是最最最最基础的了。 本文是教程的P1-P7的过程记录。 1 UV映射 拿一个3D物体&#xff0c;怎么去切割它&…

1301. C 循环(扩展欧几里得算法)

题目如下&#xff1a; 思路 or 题解: 抽象出数学公式&#xff1a; ak∗c≡b(mod1<<k)a k * c \equiv b (mod\ 1 << k)ak∗c≡b(mod 1<<k) 等价&#xff1a; x∗c−y∗(1<<k)b−ax * c - y * (1 << k) b - ax∗c−y∗(1<<k)b−a 用扩展欧…

[Python逆向] 逆向Pyinstaller打包的exe文件源码及保护

Python逆向Pyinstaller打包的exe文件源码及保护 写在前面 我们都知道可以使用Pyinstaller库可将.py文件编译成.exe文件运行&#xff0c;这篇文章我们就从将脚本编译成.exe并将.exe的源码内容反编译出源文件&#xff0c;再顺便谈谈如何防止被逆向。 环境工具 Python 3.6&#x…

(一)MicroPython——WIFI点灯

目录 学习目标 成果展示 硬件知识 代码 总结 学习目标 成果展示 预备知识 代码 总结 学习目标 我们今天来学习有关MicroPython的知识点&#xff0c;相比于用C语言来开发&#xff0c;MicroPython有许多的优点&#xff0c;比如可以交互&#xff0c;有大量的库可以调…

Allegro如何把快速BUS组高亮成不同颜色操作指导

Allegro如何把快速BUS组高亮成不同颜色操作指导 在做PCB设计的时候,会需要把BUS组高亮成不同颜色,方便评估与布线,Allegro支持快速把BUS高亮成不同的颜色,如下图 具体操作如下 打开颜色管理器出现颜色管理器

1576_AURIX_TC275_MTU控制与状态寄存器

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 在这一页之前&#xff0c;连续有好几个寄存器都是预留的&#xff0c;因此可以直接跳过。访问使能寄存器的功能&#xff0c;从描述看其实是非常熟悉的&#xff0c;因为这个描述的模板可以从…

Java多线程:线程通信:生产者 和 消费者 || 顺序打印

Java多线程&#xff1a;线程通信&#xff1a;生产者 和 消费者 || 顺序打印 每博一文案 靠谱&#xff0c;是最高级的聪明&#xff1a;师父说&#xff1a;人生一回&#xff0c;道义一场。你对人对事的态度&#xff0c;藏着你一生的福报。 千金难买好人缘&#xff0c;人活的就是…

Android编译Skia库

Android编译Skia库 本文档提供两种方法编译Skia库 使用aosp源码进行编译使用skia源码进行编译 两种编译方法都可以编译,并且都可以使用在多个平台中,且可以使用在不同Android版本中 使用aosp源码编译 第一步是拿到aosp的源码.因为写这篇教程,使用的是msm8996的源码,因此,我…

Armitage图形化前端

开源免费图形前端 ● 作者自称是众多不会使用metasploit的安全专家之一&#xff08;命令行&#xff09; ● MSF基于命令行&#xff0c;缺少直观的GUI图形用户接口 Armitage只是调用MSF的漏洞利用能力 ● Armitage的每一个GUI操作都可以对应MSF中的一条命令 红队团队合作模拟…

OSCP vulhub LORD OF THE ROOT: 1.0.1

vulhub LORD OF THE ROOT: 1.0.1靶场信息&安装Description一、信息收集第一种ssh爆破第二种猜二、漏洞探测三、漏洞利用四、提权第二种方法&#xff1a;udf提权第三种缓冲区溢出提权靶场信息&安装 地址&#xff1a;https://www.vulnhub.com/entry/lord-of-the-root-10…

APSIM练习:向管理组件添加额外规则

“标准”作物管理组件没有提供很多选项来决定何时播种作物——很可能应该考虑一系列额外的种植规则&#xff08;例如&#xff0c;土壤是否足够干燥以驱动拖拉机过去&#xff1f;&#xff09;&#xff0c;并且在播种时应采取额外措施&#xff08;例如添加一些肥料&#xff09;。…