Java异常处理集合

news2025/1/17 1:06:01

Java异常处理

Java语言在执行后会中断,也就是在出错位置后的代码都不会被执行,为了使非致命错误后的程序仍然能够执行,引入异常处理机制。

异常

可处理的异常用Exception表示,不可处理的异常用Error表示,通常是栈内存溢出或堆内存溢出,具体又分为编译时异常和运行时异常,编译异常要求开发者必须进行处理,运行时异常可处理也可不处理,区分方法是看其是否继承了RunTimeException类,我们自行规定异常的原则应该是出现异常的概率大,用编译异常,强制要求方法调用者处理,出现异常的概率小,使用运行时异常。

异常抛出

Java执行程序出现异常后,立即创建异常对象,并用throw抛出,创建一个异常对象实例。

编写方法时认为该方法有较大概率出现某种异常,可使用throws进行修饰,让调用者在调用时根据编译异常和运行时异常酌情处理,编译时异常必须处理,使用异常处理机制或继续向上抛出。

异常处理

处理机制为try {} catch(接受异常的实例){} finaly{}其中catch可多层使用,即处理多个异常,处理机制可嵌套使用,finaly内的语句在任何情况下都执行,通常在此进行资源回收。

自定义异常

创建对应的异常子类,继承ExceptionRunTimeException,构造有参构造函数并传入message,可在抛出异常时输出message

包装类

object类是所有类的父类,可以接受所有基本数据类型,基本类型对应的类即包装类,二者可以直接互相赋值,因为包装类提供自动装箱和自动拆箱方法,即基本数据类型转引用数据类型,引用数据类型转基本数据类型。其对应如下图:
包装类对应
可以看出除了intchar对应不同外,其余基本数据的包装类名均为其首字母大写,其实是Java提供处理基本数据类型的方法。

String类

该类不可被继承,因为在定义中其被final修饰,常用方法总结如下:

equal						判断字符串相等,比较地址
sbstring(a,b) 				切割a-b之间的字符
endsWith(a)					判断是否以a为结尾,a可以是字符串
getBytes()					将字符串转为`byte`数组
toLowerCase					大写转为小写,原有小写不变
replace(目标,替换)	      	将目标字符串转为替换字符串	
contains					判断字符串内是否包含一个字符串,返回布尔类型
trim						去除首尾空格
indexOf(a)					返回a对应的下标索引
split(a)					以a为分割,将字符串拆分为对应数组

加强for循环

for(数据类型 遍历到的每个对象 : 容器对象)用于遍历容器内的每一个对象。

集合

集合是容器的一种,用于高效存储数据,且只能存放引用数据类型,基本数据类型在存放时会自动装箱,同一集合内的数据元素类型没有限制。
Collection集合有ListSet两个接口,分别对应ArryListLinkedListHashSetTreeSet实例。
Map集合的两个实例为HashMapTreeMap
Collection集合的基本方法如下:

Collection collection=new ArrayList();//建立实例
add 添加元素
addall 复制所有元素
clear 移除所有元素
iterator 返回迭代器 可用于遍历 hasNext判断是否有下一个元素,删除修改需要对迭代器操作
remove 删除元素
cotains 判断集合是否包含元素

泛型

Java5之后推出的新特性,List<数据类型> list = new ArryList<>();,用于限制集合内存放的数据类型

List

具体实现类有ArrayListLinkedList,分别是基于数组和链表实现。

ArrayList有序,可重复,提供了按照索引访问元素的方法,但对多线程不安全,需要手动同步,默认容量为10,装满后自动触发扩容机制,扩为原来的1.5倍。

vector是线程安全的ArrayList,但效率很低,多线程场景下进入方法会发生线程阻塞,可以采用其他方法保证线程安全;扩容时扩大为原来的2倍。
ArrayList的扩容机制都是创建大数组并复制内容覆盖掉原有数组。

LinkedList同样有序可重复,但底层封装了双向链表,且通过节点方式存储数据,故随机增删效率高,无扩容机制,存储一个元素就创建一个新节点。

Set

HashSet

HashSet底层封装HashMap集合,存储元素在MapKey部分,无序不可重复。

TreeSet

底层使用TreeMap,可对存入元素进行排序,存入自定义元素需要实现比较器接口,重写比较器规则。

Map

hashMap是保存具有映射关系的数据,即keyvalue对应的结构,二者都为引用数据类型,key一般为String类型,其中keyset方法存放,不允许重复,该结构为单向一对一结构,底层实现基于链表和数组(哈希表),可定义可用泛型。

执行原理

hashmap通过存储keyhashcode来确定再数组上索引的位置,然后根据key来跟该下标索引下所有的链表节点进行equals比较,如果equals方法返回true,说明key相同,后者会覆盖前者,返回false,将创建新的节点。扩容因子为2.0。
equals方法仅比较地址,若要根据内容比较需重写方法,重写方法可使用alt+insert快捷键生成。
hashmap执行原理

//常用方法
put(key,value)		//添加元素
size  				//获取长度
containsKey/value	//判断集合中是否包含某个key/value
remove(key)			//根据key删除
get(key)			//根据key获取value

遍历方法

方法一:获取所有key,通过get方法获取value
Set<String> s=hashMap.keySet();
//返回set集合包含的所有key,再for循环获取value即可。

方法二:通过entrySet方法,将Map转为Set
Set<Map.Entry<String,Object>> entries=hashMap.entrySet();
获得Set格式的Map集合,加强for循环,使用get方法获得keyvalue即可。

TreeMap

存储时根据key排序,保证数据的有序状态,底层使用红黑树存储数据,可以自定义排序规则,String中已实现,自编写类要实现比较器规则,通过imlements comparble实现接口,再重写compareTo方法,该方法返回整型,正数为升序,非正为降序。

HashTable

底层封装哈希表,线程安全版本的HashMap集合,keyvalue不能为空,与HashMap的区别如下:

● 实现方式不同:Hashtable 继承了 Dictionary类,而 HashMap 继承的是 AbstractMap 类。
● 初始化容量不同:HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75。
● 扩容机制不同:当现有容量大于总容量 * 负载因子时,HashMap 扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍 + 1。
● Hashtable 是不允许键或值为 null 的,HashMap 的键值则都可以为 null。因为Hashtable使用的是安全失败机制(fail-safe),这种机制会使你此次读到的数据不一定是最新的数据。
如果你使用null值,就会使得其无法判断对应的key是不存在还是为空,因为你无法再调用一次contain(key)来对key是否存在进行判断。
● 快速失败(fail—fast)是java集合中的一种机制, 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。

总结

List是Java给我们在数组基础上改进形成的更方便的表结构,在存储添加单一信息时更加方便;Map结构则是一种映射关系,需要根据key来找到对应的value时使用;Set结构感觉同时继承二者,不大明白单独存在的必要性。

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

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

相关文章

ShardingSphere之ShardingJDBC客户端分库分表下

目录 ShardingJDBC实战 STANDARD标准分片策略 COMPLEX_INLINE复杂分片策略 CLASS_BASED自定义分片策略 HINT_INLINE强制分片策略 ShardingJDBC实战 上篇已经将需要用到的类、数据库表都准备好了&#xff0c;本篇主要介绍分片配置文件。 STANDARD标准分片策略 如果按照上篇文…

Python笔记14-实战小游戏飞机大战(上)

文章目录 功能规划安装pygame绘制游戏窗口添加玩家飞机图像屏幕上绘制飞船代码重构驾驶飞船全屏模式射击 功能规划 玩家控制一艘最初出现在屏幕底部中央的飞船。玩家可以使用箭头键左右移动飞船&#xff0c;还可使用空格键射击。游戏开始时&#xff0c;一群外星人出现在天空中…

如何从 Android SD 卡恢复已删除的照片

您是否不小心从 Android SD 卡中删除了一些照片&#xff1f;您是否尝试访问昨天拍摄的照片&#xff0c;但无论您在哪里查看都找不到它们&#xff1f;您的 Android 手机的外部存储是否已损坏&#xff0c;其内容无法访问&#xff1f; 在这种情况下&#xff0c;您应该尽快采取行动…

LV老板重夺全球首富 再次超过马斯克;新东方安徽总部大厦启用;中国与泰国签署互免签证协定

今日精选 • LV老板重夺全球首富 再次超过马斯克• 新东方安徽总部大厦启用• 中国与泰国签署互免签证协定 投融资与企业动态 • ​​传Temu将于3月在美国上线半托管业务• 国内数字支付解决方案提供商 “连连数字” 估值150亿&#xff0c;即将IPO• 滴滴与宁德时代宣布成立…

【Javaweb程序设计】【C00164】基于SSM的飞机订票系统(论文+PPT)

基于SSM的飞机订票系统&#xff08;论文PPT&#xff09; 项目简介项目获取开发环境项目技术运行截图 项目包运行、免费远程调试 项目简介 这是一个基于ssm的飞机订票系统 本系统分为前台用户模块和后台管理员模块。 前台用户模块&#xff1a;当游客打开系统的网址后&#xff0…

营销领域有哪些著名的模型?如销售漏斗等

一、金字塔原理 模型 适用场景&#xff1a;提案 沟通 思考理论 模型 来源&#xff1a;麦肯锡 芭芭明托 1、表达的逻辑 遵循金字塔模型的逻辑&#xff0c;先说结论&#xff0c;后说论据。所有表达的内容都可归纳出一个核心论点。这个核心论点由N个论据作为支持&#xff0c;而…

Qt扩展-QXlsx读写Excel配置使用

QXlsx读写Excel配置使用 一、概述1. 功能概述2. 其他维护 二、安装1. 下载源码2. 配置项目3. 测试代码4. 运行结果 一、概述 项目介绍&#xff1a;https://qtexcel.github.io/QXlsx/Example.html GitHub&#xff1a;https://github.com/QtExcel/QXlsx/tree/master QXlsx 是一个…

时序分析中的去趋势化方法

时序分析中的去趋势化方法 时序分析是研究随时间变化的数据模式的一门学科。在时序数据中&#xff0c;趋势是一种随着时间推移而呈现的长期变化趋势&#xff0c;去趋势化是为了消除或减弱这种趋势&#xff0c;使数据更具平稳性。本文将简单介绍时序分析中常用的去趋势化方法&a…

java自定义异常处理操作

目录 引入 介绍 一、为我们的方法创建异常类 二、使用我们定义的异常类 引入 我们在编写java代码的时候,想要在我们自己写的方法中加入我们的异常处理 介绍 一、为我们的方法创建异常类 我们先单独创建一个类,来当作我们抛出异常的类 public class AgeIllegalException ex…

JavaScript DOM属性和方法之element元素对象

在HTML DOM中&#xff0c;elment对象表示HTML与纳素&#xff0c;可以包含的节点类型有元素u节点、文本节点、注释节点。它们有响应的属性和方法&#xff0c;有很多都是我们之前用过的。 一、element对象属性 1、attributes 2、childNodes 3、className 4、clientWidth、of…

计算机中丢失mfc100u.dll怎么解决,详细解析mfc100u.dll丢失的解决方法

遭遇“无法找到mfc100u.dll”的错误不必过分担忧&#xff0c;这是一个普遍现象。许多用户在启动某些软件或游戏的时候可能会碰到这样的情况。通常&#xff0c;这个错误信息表明你的计算机系统中缺失了一个关键的动态链接库(DLL)文件&#xff0c;它可能会妨碍应用程序的顺利启动…

Centos7 升级Docker 至最新版本

卸载旧版本的Docker yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine 安装需要的软件包 yum install -y yum-utils device-mapper-persistent-data lvm2 添加Docker的yum源 #yu…

uniapp,页面当有按钮的时候,可以做一个动态的效果

效果&#xff1a; 这个是当点着按钮的时候没有松开按钮的效果&#xff08;没有阴影&#xff09; 这个是当松开按钮的效果&#xff08;有阴影&#xff09; 原理讲解&#xff1a; 这段代码实现的业务逻辑是在一个Vue组件中控制“现金”按钮的阴影效果。具体来说&#xff0c;它通…

Qt WebEngine模块使用(开发环境安装和程序开发)

一、Qt WebEngine Qt WebEngine_hitzsf的博客-CSDN博客 Qt WebEngine模块提供了一个Web浏览器引擎&#xff0c;可以轻松地将万维网上的内容嵌入到没有本机Web引擎的平台上的Qt应用程序中。Qt WebEngine提供了用于渲染HTML&#xff0c;XHTML和SVG文档的C 类和QML类型&#xff…

服务端开发小记02——Maven

这里写目录标题 Maven简介Maven在Linux下的安装Maven常用命令 Maven简介 Apache Maven Project是一个apache的开源项目&#xff0c;是用于构建和管理Java项目的工具包。 用Maven可以方便地创建项目&#xff0c;基于archetype可以创建多种类型的java项目&#xff1b;Maven仓库…

带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)

文章目录 查看源码是否编译时有-g调试信息和符号表在 gdb 中加载 debug 文件/符号表将 debug 文件放入 ".debug" 文件夹通过 gdb 命令 set debug-file-directory directories GCC的gcc和g区别指定gcc/g&#xff0c;glibc的版本进行编译指定gcc/g的版本指定glibc的和l…

最新计算机软件毕业设计选题大全

最新计算机软件毕业设计选题大全 1、毕业设计选题 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云开发社区乘风者计划专家博主&#xff0c;CSDN平台Java领域优质创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。✌️ 主要项目&#xff1a;小…

ppt背景图片怎么设置?让你的演示更加出彩!

PowerPoint是一款广泛应用于演示文稿制作的软件&#xff0c;而背景图片是演示文稿中不可或缺的一部分。一个好的背景图片能够提升演示文稿的整体效果&#xff0c;使观众更加关注你的演示内容。可是ppt背景图片怎么设置呢&#xff1f;本文将介绍ppt背景图片设置的三个方法&#…

JavaScript DOM属性和方法之event事件对象

event对象代表事件的状态&#xff0c;比如事件在其中发生的元素&#xff0c;键盘按键的状态、鼠标的位置、鼠标按钮的状态&#xff0c;事件通常与函数结合使用&#xff0c;函数不会在事件发生前被执行&#xff0c;只有当事件被触发的时候才会执行函数。 一、句柄事件 1、oncl…

免费且安全的SSL证书:JoySSL为您的网站安全保驾护航

在当今这个数字化飞速发展的时代&#xff0c;网络安全问题日益凸显&#xff0c;特别是对于网站所有者而言&#xff0c;如何保障用户数据的安全传输显得尤为重要。SSL&#xff08;安全套接层&#xff09;证书作为一种有效的加密工具&#xff0c;被广泛应用于各类网站中。那么&am…