Java异常处理集合

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.hqwc.cn/news/439730.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索数字经济:从基础到前沿的奇妙旅程

新一轮技术革命方兴未艾&#xff0c;特别是以人工智能、大数据、物联网等为代表的数字技术革命&#xff0c;催生了一系列新技术、新产业、新模式&#xff0c;深刻改变着世界经济面貌。数字经济已成为重组全球要素资源、重塑全球经济结构、改变全球竞争格局的关键力量。预估到20…

儿童写字用什么台灯比较好?学生专用台灯第一品牌

现在孩子的生活比我们小学时候更加丰富多彩&#xff0c;当然也更“忙”了起来&#xff01;正是因为上学之后&#xff0c;有了这么多的学习任务&#xff0c;所以孩子的桌面空间使用频率越来越高&#xff01;为了让孩子更好地完成学习任务&#xff0c;以及保护视力。越来越多家长…

BUUCTF misc 二维码

目录 将Windows中的文件传输到Linux虚拟机中 binwalk用法 kali-linux中使用fcrackzip工具爆破zip密码 打开题目&#xff1a; 下载并解压后&#xff0c;得到一张二维码图片&#xff0c;我们使用 toolhelper.cn 里的二维码解析小工具查看得到&#xff1a; 可以看到 secret is …

led护眼灯真的能护眼吗安全吗?护眼又安全的LED灯推荐

近些年来&#xff0c;中国患近视的孩子越来越多&#xff0c;为了让孩子在家写作业时眼睛少受损伤&#xff0c;很多家长专门准备了LED台灯。但不合格LED灯反而加剧孩子们视力疲劳&#xff0c;甚至出现近视。其中重要一个原因是某些LED灯存在着严重的频闪&#xff0c;长期在这样的…

关于bypassuac的探究——基础知识

用户帐户控制(User Account Control)是Windows Vista&#xff08;及更高版本操作系统&#xff09;中一组新的基础结构技术&#xff0c;可以帮助阻止恶意程序&#xff08;有时也称为“恶意软件”&#xff09;损坏系统&#xff0c;同时也可以帮助组织部署更易于管理的平台。 使用…

java8 Duration类学习

Duration类 官网地址 基于时间的时间量&#xff0c;例如“34.5秒”。 此类以秒和纳秒为单位对时间的量或量进行建模。它可以使用其他基于持续时间的单位访问&#xff0c;如分钟和小时。此外&#xff0c;可以使用DAYS单位&#xff0c;并将其视为完全等于24小时&#xff0c;从…

web wifi配网和模式切换-esp8266和esp32

web wifi配网和模式切换-esp8266和esp32 支持模式:1:tcp client() 2:tcp server 3:http server(POST/GET) 4:http client 5:udp,6:factory,7:mqtt 配网进入方式&#xff1a; 开机&#xff0c;指示灯亮起后(需要灯闪烁3下后)&#xff0c;需在3s内&#xff08;超过3s则会正常启动…

C++ QT入门1——记事本基础功能实现(基本控件布局+信号与槽+文件类操作)

C QT入门1——记事本基础功能实现&#xff08;基本控件布局信号与槽文件类操作&#xff09; 一、UI界面的基础设置样式表通用配置通过样式表设置按钮三态以图片作为按钮背景 二、按键响应——☆信号与槽信号与槽基本概念按键QPushButton设置信号与槽自定义信号与槽自定义信号与…

快速理解MoE模型

最近由于一些开源MoE模型的出现&#xff0c;带火了开源社区&#xff0c;为何&#xff1f;因为它开源了最有名气的GPT4的模型结构&#xff08;OPEN AI&#xff09;&#xff0c;GPT4为何那么强大呢&#xff1f;看看MoE模型的你就知道了。 MoE模型结构&#xff1a; 图中&#xff0…

【总线接口】3.常见总线、接口GPIO、I2C、SPI、I2S、Modbus

初接触硬件&#xff0c;五花八门的总线、接口一定会让你有些疑惑&#xff0c;我尝试用一系列文章来解开你的疑惑。 系列文章 【总线接口】1.以Xilinx开发板为例&#xff0c;直观的认识硬件接口 【总线接口】2.学习硬件这些年接触过的硬件接口、总线 大汇总 【总线接口】3.常见…

ES6.8.6 Java客户端发起 增删改查 query (bool)、update、delete

文章目录 环境测试数据增单个新增批量新增 删通过delete by api删除通过delete by query api删除删除索引中指定字段&#xff08;script&#xff09; 改单个修改update by api通过_bulk批量修改批量修改update by query api使用script脚本修改 查完全匹配&#xff08;term&…

MySQL原理(一)架构组成(2)逻辑模块组成

总的来说&#xff0c;MySQL可以看成是二层架构&#xff0c;第一层我们通常叫做SQL Layer&#xff0c;在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的&#xff0c;包括权限判断&#xff0c;sql解析&#xff0c;执行计划优化&#xff0c;query cache的处理等等&…