Java程序设计进阶

Java异常处理机制

异常

异常的最高父类是 Throwable,在 java.lang 包下。

Throwable 类的方法主要有:

方法说明
public String getMessage()返回对象的错误信息
public void printStackTrace()输出对象的跟踪信息到标准错误输出流
public void printStackTrace(PrintStream s)输出对象的跟踪信息到输出流 s
public String toString()返回对象的简短描述信息

Throwable 类的子类有 Error 错误和 Exception 违例。

异常的捕获处理

       当 Java 运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获异常

try-catch

try 语句块:

  • 将可能出现异常的代码都放在 try 代码块中。
  • try 语句块中发现异常,剩下的语句将不再执行。

catch 语句块:

  • 在 catch 语句块中是对异常对象进行处理的代码。
  • 每个 try 语句块可以伴随一个或多个 catch 语句,用于处理可能产生的不同类型的异常对象。
  • 通过 getMessage( ) 获取异常信息或 printStackTrace( ) 跟踪异常信息。

finally

        finally 关键字主要是和捕获异常的 try-catch 语句一起使用,放在 finally 语句块中的内容表示无条件执行的部分,也就是说不管程序有异常或没有异常都需要执行的部分。

企业面试时,经常会提到的问题:final、finally 和 finalize 的区别是什么?

  • final 关键字,是用来修饰属性、方法、类的。
  • finally 关键字,可以配合异常处理,进行无条件执行操作。
  • finalize 不是关键字,是 Object 类中的一个方法,是 Java 垃圾回收机制中进行资源释放的方法。

异常的抛出处理

        Java 程序的执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给 Java 运行时系统,这个过程称为抛出异常

        throws 抛出的异常可以是 0 或多个,也就是说声明方法时可以不抛出异常,也可以抛出 1 个,或多个。

        throw 关键字后只能抛出一个确切的异常类对象,而 throws 后可以抛出多个异常类,而非 new 的对象。

        throw 之后的只能是异常对象,不能是其他对象,也就是说不能这样写 throw new String("错误信息") 。

自定义异常

创建异常类,只需满足以下两个要求:

  1. 声明一个类需要继承 Exception 或是它的子类。
  2. 提供至少 2 个构造方法,一个无参构造器,一个带参构造器,参数需要包含传递的异常信息。


集合和泛型

集合框架

        集合框架可以分为 Collection 和 Map 两类

        Collection 接口

        主要有三个子接口,分别是 Set 接口、List 接口和 Queue 接口,下面简要介绍这三个接口。

  • Set 接口

    Set 实例用于存储一组不重复的,无序的元素。

  • List 接口

    List 实例是一个有序集合。程序员可对 List 中每个元素的位置进行精确控制,可以根据索引来访问元素,此外 List 中的元素是可以重复的。

  • Queue 接口

    Queue 中的元素遵循先进先出的规则,是对数据结构 “队列” 的实现。

        Map接口

        定义了存储和操作一组 “键(key)值(value)” 映射对的方法。

        区别        

        Map 接口和 Collection 接口的本质区别在于,Collection 接口里存放的是一系列单值对象,而 Map 接口里存放的是一系列 key-value 对象。Map 中的 key 不能重复,每个 key 最多只能映射到一个值。

Set接口(无重复,无序)

         Set 接口继承自 Collection 接口的主要方法。

  • boolean add(Object obj)

    向集合中添加一个 obj 元素,并且 obj 不能和集合中现有数据元素重复,添加成功后返回 true。如果添加的是重复元素,则添加操作无效,并返回 false。

  • void clear()

    移除此集合中的所有数据元素,即将集合清空。

  • boolean contains(Object obj)

    判断此集合中是否包含 obj,如果包含,则返回 true。

  • boolean isEmpty()

    判断集合是否为空,为空则返回 true。

  • Iterator iterator()

    返回一个 Iterator 对象,可用它来遍历集合中的数据元素。

  • boolean remove(Object obj)

    如果此集合中包含 obj,则将其删除,并返回 true。

  • int size()

    返回集合中真实存放数据元素的个数,注意与数组、字符串获取长度的方法的区别。

  • Object[] toArray()

    返回一个数组,该数组包含集合中的所有数据元素。

        HashSet

//创建一个HashSet对象,存放学生姓名信息
Set nameSet = new HashSet();
// 操作
System.out.println("添加王云是否成功:" + nameSet.add("王云"));System.out.println("显示集合内容:" + nameSet);System.out.println("集合里是否包含南天华:" + nameSet.contains("南天华"));System.out.println("从集合中删除\"南天华\"...");
nameSet.remove("南天华");System.out.println("集合里是否包含南天华:" + nameSet.contains("南天华"));System.out.println("集合中的元素个数为:" + nameSet.size());

        HashSet 是如何判断元素重复的?

        当向 HashSet 中增加元素时,HashSet 会先计算此元素的 hashcode,如果 hashcode 值与 HashSet 集合中的其他元素的 hashcode 值都不相同,那么就能断定此元素是唯一的。否则,如果 hashcode 值与 HashSet 集合中的某个元素的 hashcode 值相同,HashSet 就会继续调用 equals() 方法进一步判断它们的内容是否相同,如果相同就忽略这个新增的元素,如果不同就把它增加到 HashSet 中。

        TreeSet

        TreeSet 类在实现了 Set 接口的同时,也实现了 SortedSet 接口,是一个具有排序功能的 Set 接口实现类。TreeSet 集合中的元素是按字典顺序进行排列输出的。

        常用方法

  • add() 方法,为集合添加元素。
  • toArray() 方法,把集合中的所有数据提取到一个新的数组中。
 // 创建整型数组Integer[] array = new Integer[size];// 将集合元素转换为数组元素set.toArray(array);

List接口(重复,有序)

        List 是 Collection 接口的子接口,List 中的元素是有序的,而且可以重复。常用的 List 实现类是 ArrayList 和 LinkedList。

        常用方法

  • void add(int index,Object o)

    在集合的指定 index 位置处,插入指定的 o 元素。

  • Object get(int index)

    返回集合中 index 位置的数据元素。

  • int indexOf(Object o)

    返回此集合中第一次出现的指定 o 元素的索引,如果此集合不包含 o 元素,则返回-1。

  • int lastIndexOf(Object o)

    返回此集合中最后出现的指定 o 元素的索引,如果此集合不包含 o 元素,则返回-1。

  • Object remove(int index)

    移除集合中 index 位置的数据元素。

  • Object set(int index,Object o)

    用指定的 o 元素替换集合中 index 位置的数据元素。

        ArrayList 类

        数组(顺序表)在插入或删除数据元素时,需要批量移动数据元素,故性能较差;但在根据索引获取数据元素时,因为数组是连续存储的,所以在遍历元素或随机访问元素时效率高。

        ArrayList 实现类的底层就是数组,因此 ArrayList 实现类更加适合根据索引访问元素的操作。

        LinkedList 类

        LinkedList 的底层是链表。LinkedList 和 ArrayList 在应用层面类似,只是底层存储结构上的差异导致了二者对于不同操作,存在性能上的差异。这其实就是顺序表和链表之间的差异。一般而言,对于 “索引访问” 较多的集合操作建议使用 ArrayList 实现类,而对于 “增删” 较多的集合操作建议使用 LinkedList 实现类

泛型

        泛型是指在定义集合的同时也定义集合中元素的类型,需要 “< >” 进行指定,其语法形式如下:

集合<数据类型> 引用名 = new 集合实现类<数据类型> ();

        在定义集合的同时使用泛型,用 “< >” 进行指定集合中元素的类型后,再从集合中取出某个元素时,就不需要进行类型转换,不仅可以提高程序的效率,也让程序更加清晰明了,易于理解。

Iterator 接口

        Iterator 接口为遍历集合而生,是 Java 语言解决集合遍历的一个工具。

        iterator() 方法定义在 Collection 接口中,因此所有单值集合的实现类,都可以通过 iterator() 方法实现遍历。

        Iterator 接口的三个方法:

  • boolean hasNext()

    判断是否存在下一个可访问的数据元素。

  • Object next()

    返回要访问的下一个数据元素,通常和 hasNext() 在一起使用。

  • void remove()

    从迭代器指向的 Collection 集合中移除迭代器返回的上一个数据元素。

Integer[] infos = {12,45,23,86,100,78,546,1,45,99,136,23};
Set s = new TreeSet();
for (Integer i : infos) {s.add(i);
}// 使用迭代器遍历集合数据
Iterator it = s.iterator();
while(it.hasNext()) {System.out.println(it.next());
}

Map接口

        Map 接口,用于保存具有映射关系的键值对数据。

        Map<K,V> 接口中的 key 和 value 可以是任何引用类型的数据,key 不允许重复value 可以重复,key 和 value 都可以是 null 值,但需要注意的是,key 为 null 只能有一个value 为 null 可以多个,它们之间存在单向一对一关系,也就是说通过指定存在的 key 一定找到对应的 value 值。

        常用方法

  • Object put(Object key,Object value)

    将指定键值对(key 和 value)添加到 Map 集合中,如果此 Map 集合以前包含一个该键 key 的键值对,则用参数 key 和 value 替换旧值。

  • Object get(Object key)

    返回指定键 key 所对应的值,如果此 Map 集合中不包含该键 key,则返回 null。

  • Object remove(Object key)

    如果存在指定键 key 的键值对,则将该键值对从此 Map 集合中移除。

  • Set keySet()

    返回此 Map 集合中包含的键的 Set 集合。在上面的程序最后添加下面的语句:System.out. println(domains.keySet());,则会输出[com, edu, org, net]

  • Collection values()

    返回此 Map 集合中包含的值的 Collection 集合。在上面的程序最后添加下面的语句:System.out.println(domains.values());,则会输出[工商企业,教研机构,非营利组织,网络服务商]

  • boolean containsKey(Object key)

    如果此 Map 集合包含指定键 key 的键值对,则返回 true。

  • boolean containsValue(Object value)

    如果此 Map 集合将一个或多个键映射到指定值,则返回 true。

  • int size()

    返回此 Map 集合的键值对的个数。


IO和XML

File 类


Java反射机制


Java多线程机制


Java网络编程API


Java注解


Junit测试框架


JDK8与函数式编程

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

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

相关文章

【项目设计】网络对战五子棋(下)

我不再装模作样地拥有很多朋友&#xff0c;而是回到了孤单之中&#xff0c;以真正的我开始了独自的生活。有时我也会因为寂寞而难以忍受空虚的折磨&#xff0c;但我宁愿以这样的方式来维护自己的自尊&#xff0c;也不愿以耻辱为代价去换取那种表面的朋友。 文章目录 一、项目设…

Postman笔记

文章目录 1.安装2.简介和使用流程3 postman使用3.1 测试集与HTTP请求发送HTTP请求和分析响应数据 3.2 发送HTTP请求和分析响应数据3.3 Postman中请求体提交方式3.4 Postman使用之接口测试3.5 使用Postman新建一个mock服务3.6 请求数据的参数化3.7 断言与脚本导出 1.安装 官网地…

DP读书:《openEuler操作系统》(五)进程与线程

进程与线程 进程的概念程序&#xff1a;从源码到执行1. 编译阶段:2. 加载阶段:3. 执行阶段: 程序的并发执行与进程抽象 进程的描述进程控制块1. 描述信息2. 控制信息3. CPU上下文4. 资源管理信息 进程状态1.就绪状态2.运行状态3.阻塞状态4.终止状态 进程的控制进程控制源语1.创…

CrossOver23.6软件激活码怎么获取 CrossOver软件2023怎么激活

CrossOver一款类虚拟机&#xff0c;它的主要功能是在mac系统中安装windows应用程序。其工作原理是将exe格式的windows应用程序安装包安装至CrossOver容器中&#xff0c;并将运行该exe文件所需的配置文件下载至容器中&#xff0c;便能在mac正常运行windows应用程序了。下面就让我…

如何构建一个外卖微信小程序

随着外卖行业的不断发展&#xff0c;越来越多的商家开始关注外卖微信小程序的开发。微信小程序具有使用方便、快速上线、用户覆盖广等优势&#xff0c;成为了商家们的首选。 那么&#xff0c;如何快速开发一个外卖微信小程序呢&#xff1f;下面就让我们来看看吧&#xff01; 首…

【C++入门:C++世界的奇幻之旅】

1. 什么是C 2. C发展史 3. C的重要性 4. C关键字 5. 命名空间 6. C输入&输出 7. 缺省参数 8. 函数重载 9. 引用 10. 内联函数 11. auto关键字(C11) 12. 基于范围的for循环(C11) 13. 指针空值---nullptr(C11)05. 1. 什么是C C语言是结构化和模块化的语言&…

什么是web3.0?

Web 3.0&#xff0c;也常被称为下一代互联网&#xff0c;代表着互联网的下一个重大演变。尽管关于Web 3.0的确切定义尚无共识&#xff0c;但它通常被认为是一种更分散、更开放且更智能的互联网。 以下是Web 3.0的一些主要特征和概念&#xff1a; 1. 去中心化 Web 3.0旨在减少…

人工智能:CNN(卷积神经网络)、RNN(循环神经网络)、DNN(深度神经网络)的知识梳理

卷积神经网络&#xff08;CNN&#xff09; 卷积神经网络&#xff08;CNN&#xff09;&#xff0c;也被称为ConvNets或Convolutional Neural Networks&#xff0c;是一种深度学习神经网络架构&#xff0c;主要用于处理和分析具有网格状结构的数据&#xff0c;特别是图像和视频数…

CSS中 通过自定义属性(变量)动态修改元素样式(以 el-input 为例)

传送门&#xff1a;CSS中 自定义属性&#xff08;变量&#xff09;详解 1. 需求及解决方案 需求&#xff1a;通常我们动态修改 div 元素的样式&#xff0c;使用 :style 和 :class 即可&#xff1b;但想要动态修改 如&#xff1a;Element-ui 中输入框&#xff08;input&#x…

Windows与Linux服务器互传文件

使用winscp实现图形化拖动的方式互传文件. 1.下载winscp软件并安装&#xff0c;官方地址&#xff1a; https://winscp.net/eng/index.php 2.打开软件&#xff1a; 文件协议选择scp&#xff0c;输入linux服务器的IP和端口号&#xff0c;然后输入你的用户名和密码就可以登陆了。…

postman打开后,以前的接口记录不在,问题解决

要不这些文件保存在C:\Users\{用户名}\AppData\Roaming\Postman 比如&#xff0c;你目前使用的window登录用户是abc&#xff0c;那么地址便是C:\Users\abc\AppData\Roaming\Postman 打开后&#xff0c;这个目录下会有一些命名为backup-yyyy-MM-ddThh-mm-ss.SSSZ.json类似的文…

渗透攻击漏洞——原型链污染

背景 2019年初&#xff0c;Snyk的安全研究人员披露了流行的JavaScript库Lodash中一个严重漏洞的详细信息&#xff0c;该漏洞使黑客能够攻击多个Web应用程序&#xff0c;这个安全漏洞就是一个“原型污染漏洞”&#xff08;JavaScript Prototype Pollution&#xff09;&#xff…

【分布式】大模型分布式训练入门与实践 - 04

大模型分布式训练 数据并行-Distributed Data Parallel1.1 背景1.2 PyTorch DDP1&#xff09; DDP训练流程2&#xff09;DistributedSampler3&#xff09;DataLoader: Parallelizing data loading4&#xff09;Data-parallel&#xff08;DP&#xff09;5&#xff09;DDP原理解析…

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引&#xff0c;初始值为…

Java IDEA controller导出CSV,excel

Java IDEA controller导出CSV&#xff0c;excel 导出excel/csv&#xff0c;亲测可共用一个方法&#xff0c;代码逻辑里判断设置不同的表头及contentType&#xff1b;导出excel导出csv 优化&#xff1a;有数据时才可以导出参考 导出excel/csv&#xff0c;亲测可共用一个方法&…

【多线程】Java如何实现多线程?如何保证线程安全?如何自定义线程池?

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 多线程 Java多线程1. 进程与线程2. 多线程1&am…

人工智能基础_机器学习001_线性回归_多元线性回归_最优解_基本概念_有监督机器学习_jupyter notebook---人工智能工作笔记0040

线性和回归,就是自然规律,比如人类是身高趋于某个值的概率最大,回归就是通过数学方法找到事物的规律. 机器学习作用: 该专业实际应用于机器视觉、指纹识别、人脸识别、视网膜识别、虹膜识别、掌纹识别、专家系统、自动规划、智能搜索、定理证明、博弈、自动程序设计、智能控制…

【PyTorch】深度学习实践 01 Overview

人工智能概述 课程前置知识 线性代数 概率论 &#xff08;不要有路径依赖&#xff0c;遇到不会的就现学&#xff09;Python基础 人工智能 问题分类 人工智能&#xff0c;实际上就是利用计算机来代替人脑进行智能工作&#xff0c;计算机所要实现的智能可以分为两大部分&am…

python造测试数据存到excel

代码&#xff1a; from ExcelHandler import ExcelHandler from faker import Faker # 导入faker库的Faker方法 # ↓默认为en_US&#xff0c;只有使用了相关语言才能生成相对应的随机数据 fkFaker(locale"zh_CN")def create_date():m int(input(请输入要造的数据条…