文章目录

  • 1. 异常
    • 异常的分类
    • 自定义异常
    • 异常的处理
    • 资源关闭:try-with-resource
  • 2. 泛型
    • 泛型类
    • 泛型接口
    • 泛型方法、通配符、上下限
    • 通配符
    • 泛型的上下限
    • 泛型支持的类型
  • 3. 包装类
  • 4. Collection集合和Map集合
    • 4.1 Collection集合
      • Collection集合特点
      • Collection的遍历方式一:迭代器遍历
      • Collection的遍历方式二:增强for循环
      • Collection集合的遍历方式三:Lambda表达式
      • 解决并发修改异常问题的方案
    • 4.2 List集合
      • 4.2.1 ArrayList的底层原理
      • 4.2.2 LinkedList的底层原理
    • 4.3 Set集合
      • 4.3.1 HashSet集合的底层原理
      • 4.3.2 LinkedHashSet集合的底层原理
      • 4.3.3 TreeSet集合的底层原理
    • 4.4 Collection集合总结
  • 5. Map集合
    • 5.1 HashMap集合的底层原理
    • 5.2 LinkedHashMap集合的原理
    • 5.3 TreeMap集合的原理
  • 6. File、字符集和IO流
    • 6.1 File
    • 6.2 字符集
      • 标准ASCII字符集
      • GBK(汉字内码扩展规范,国标)
      • Unicode字符集(统一码,也叫万国码)
      • UTF-8
      • 总结
      • 编码、解码
    • 6.3 IO流
      • IO流的分类
      • 缓冲流
      • 字符输入转换流
      • 打印流
      • 特殊数据流
    • 6.4 IO框架
      • Commons-io框架(commons-io-2.6.jar)

1. 异常

在这里插入图片描述

异常的分类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

自定义异常

在这里插入图片描述

异常的处理

两种处理方式:
在这里插入图片描述

资源关闭:try-with-resource

JDK 7开始提供了更简单的资源释放方案:try-with-resource。

try (定义资源1;定义资源2;…){可能出现异常的代码;
} catch (异常类名 变量名){异常的处理代码;
} 

该资源使用完毕后,会自动调用其 close() 方法,完成对资源的释放!
在这里插入图片描述

2. 泛型

定义类、接口、方法时,同时声明了一个或者多个类型变量(如:E、T、K、V)称为泛型类、泛型接口,泛型方法、它们统称为泛型。

作用:泛型提供了在编译阶段约束所能操作的数据类型,并自动进行检查的能力!这样可以避免强制类型转换,及其可能出现的异常。

泛型类

##形如:
修饰符 class 类名<类型变量,类型变量,…> { 
}##例如:
public class ArrayList<E>{. . .
}

泛型接口

##形如:
修饰符 interface 接口名<类型变量,类型变量,…> { 
}##例如:
public interface A<E>{. . .
}

泛型方法、通配符、上下限

##形如:
修饰符 <类型变量,类型变量,…>  返回值类型 方法名(形参列表) { 
}##例如:
public static <T> void test(T t){. . .
}

在这里插入图片描述

通配符

就是 “?” ,可以在“使用泛型”的时候代表一切类型; E T K V 是在定义泛型的时候使用。

泛型的上下限

  • 泛型上限(? extends Car)? 能接收的必须是Car或者其子类。
  • 泛型下限(? super Car)? 能接收的必须是Car或者其父类。

泛型支持的类型

泛型不支持基本数据类型,只能支持对象类型(引用数据类型)。

3. 包装类

在这里插入图片描述
自动装箱:基本数据类型可以自动转换为包装类型。
自动拆箱:包装类型可以自动转换为基本数据类型。

4. Collection集合和Map集合

在这里插入图片描述
Collection是单列集合的祖宗,它规定的方法(功能)是全部单列集合都会继承的。
在这里插入图片描述

4.1 Collection集合

Collection集合特点

在这里插入图片描述在这里插入图片描述

Collection的遍历方式一:迭代器遍历

迭代器是用来遍历集合的专用方式(数组没有迭代器),在Java中迭代器的代表是Iterator。
在这里插入图片描述

Iterator<String> it = lists.iterator();
while(it.hasNext()){String ele = it.next();System.out.println(ele);
}

Collection的遍历方式二:增强for循环

增强 for 可以用来遍历集合或者数组。
增强 for 遍历集合,本质就是迭代器遍历集合的简化写法。

Collection<String> c = new ArrayList<>();
for(String s : c) {System.out.println(s);
}

Collection集合的遍历方式三:Lambda表达式

得益于JDK 8开始的新技术Lambda表达式,提供了一种更简单、更直接的方式来遍历集合。
在这里插入图片描述

lists.forEach(s -> {System.out.println(s);
});
##  
lists.forEach(s -> System.out.println(s));

解决并发修改异常问题的方案

在这里插入图片描述

4.2 List集合

在这里插入图片描述在这里插入图片描述

4.2.1 ArrayList的底层原理

在这里插入图片描述

4.2.2 LinkedList的底层原理

LinkedList底层是基于链表存储数据的。
链表中的数据是一个一个独立的结点组成的,结点在内存中是不连续的,每个结点包含数据值和下一个结点的地址。

链表的特点:

  • 特点1查询慢,无论查询哪个数据都要从头开始找。
  • 特点2:链表增删相对快。
  • 特点3:基于双链表实现的。(对首尾元素进行增删改查的速度是极快的)

LinkedList的应用场景之一:可以用来设计队列

// 目标:用LinkedList做一个队列对象。
LinkedList<String> queue = new LinkedList<>();
// 入队
queue.addLast("赵敏");
queue.addLast("西门吹雪");
queue.addLast("陆小凤");
queue.addLast("石观音");
System.out.println(queue); // [赵敏, 西门吹雪, 陆小凤, 石观音]// 出队
System.out.println(queue.removeFirst());
System.out.println(queue.removeFirst());
System.out.println(queue);

LinkedList的应用场景之二:可以用来设计栈

// 做一个栈
LinkedList<String> stack = new LinkedList<>();
// 压栈
stack.push("第1颗子弹");
stack.push("第2颗子弹");
stack.push("第3颗子弹");
stack.push("第4颗子弹");
System.out.println(stack);  // [第4颗子弹, 第3颗子弹, 第2颗子弹, 第1颗子弹]// 出栈
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack);

4.3 Set集合

Set集合特点
在这里插入图片描述
在这里插入图片描述

4.3.1 HashSet集合的底层原理

HashSet基于哈希表存储数据的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3.2 LinkedHashSet集合的底层原理

在这里插入图片描述

4.3.3 TreeSet集合的底层原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

4.4 Collection集合总结

在这里插入图片描述

5. Map集合

Map是双列集合的祖宗,它的功能是全部双列集合都可以继承过来使用的。
在这里插入图片描述
在这里插入图片描述
常用方法
在这里插入图片描述

5.1 HashMap集合的底层原理

HashMap用的最多,HashMap跟HashSet的底层原理是一模一样的,都是基于哈希表实现的。
在这里插入图片描述

5.2 LinkedHashMap集合的原理

在这里插入图片描述

5.3 TreeMap集合的原理

在这里插入图片描述
在这里插入图片描述

6. File、字符集和IO流

在这里插入图片描述

File是java.io.包下的类, File类的对象,用于代表当前操作系统的文件(可以是文件、或文件夹),不能读写文件里面存储的数据。

IO流用于读写数据的(可以读写文件,或网络中的数据…)。

6.1 File

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
File提供的判断文件类型、获取文件信息功能
在这里插入图片描述
File提供的创建和删除文件的方法
在这里插入图片描述File提供的遍历文件夹的方法

在这里插入图片描述

6.2 字符集

标准ASCII字符集

在这里插入图片描述

GBK(汉字内码扩展规范,国标)

在这里插入图片描述

Unicode字符集(统一码,也叫万国码)

在这里插入图片描述

UTF-8

在这里插入图片描述

总结

在这里插入图片描述
注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。
注意2:英文,数字一般不会乱码,因为很多字符集都兼容了ASCII编码。

编码、解码

在这里插入图片描述

6.3 IO流

IO流的分类

在这里插入图片描述
在这里插入图片描述

缓冲流

在这里插入图片描述
BufferedInputStream缓冲字节输入流、BufferedOutputStream缓冲字节输出流
在这里插入图片描述
在这里插入图片描述
BufferedReader缓冲字符输入流
在这里插入图片描述
在这里插入图片描述
BufferedWriter缓冲字符输出流
在这里插入图片描述
在这里插入图片描述

字符输入转换流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打印流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特殊数据流

在这里插入图片描述
DataOutputStream(数据输出流)
在这里插入图片描述
DataInputStream(数据输入流)
在这里插入图片描述

6.4 IO框架

封装了Java提供的对文件、数据进行操作的代码,对外提供了更简单的方式来对文件进行操作,对数据进行读写等。

Commons-io框架(commons-io-2.6.jar)

在这里插入图片描述

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

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

相关文章

MyBatis执行器与ORM特性深度解析

一、MyBatis的Executor执行器详解1. MyBatis执行器类型MyBatis有三种核心执行器实现&#xff0c;在org.apache.ibatis.executor包中定义&#xff1a;执行器类型特点描述SimpleExecutor默认执行器&#xff0c;每次执行都会创建新的Statement对象ReuseExecutor重用预处理语句(Pre…

红黑树的特性与实现

在数据结构领域&#xff0c;二叉搜索树&#xff08;BST&#xff09;凭借 O (log n) 的平均时间复杂度成为查找、插入和删除操作的优选结构。但它有个致命缺陷&#xff1a;当输入数据有序时&#xff0c;会退化为链表&#xff0c;时间复杂度骤降至 O (n)。为解决这一问题&#xf…

ClickHouse从入门到企业级实战全解析课程简介

【课程简介】你是否正在面临这些挑战&#xff1f;海量数据的分析查询慢如蜗牛&#xff0c;报表一等就是几小时&#xff1f;想构建实时数仓&#xff0c;却不知如何高效处理 Kafka 等流式数据&#xff1f;对 ClickHouse 的众多 MergeTree 引擎感到困惑&#xff0c;不知如何选型&a…

【新启航】从人工偏差到机械精度:旋转治具让三维扫描重构数据重复精度提升至 ±0.01mm

在三维扫描重构领域&#xff0c;传统人工操作方式受限于人为因素干扰&#xff0c;数据重复精度难以保证&#xff0c;无法满足高精度工业检测与逆向工程需求。旋转治具凭借先进的机械设计与自动化控制技术&#xff0c;将三维扫描重构数据重复精度提升至 0.01mm&#xff0c;实现从…

《汇编语言:基于X86处理器》第13章 复习题和编程练习

本篇记录了《汇编语言&#xff1a;基于X86处理器》第13章 复习题和编程练习的学习笔记。13.6 复习题1.当汇编过程被高级语言程序调用时&#xff0c;主调程序与被调过程是否应使用相同的内存模式?答&#xff1a;主调程序与被调过程使用的内存模式必须相同。2.C 和 C程序调用汇编…

SpringAI智能航空助手实战<Demo>

我们将如何将我们得传统业务进行智能化的改造>>>1.将我们传统的航空票务系统 我们之前通过按钮的方式来完成 现在我们通过智能对话的方式完成 >现在我们通过对话的方式来完成 整个智能化的改造 传统应用如何进行智能化改造 我们把我们的项目通过Spring-ai 来接入A…

windows git安装步骤

1&#xff0c;从官网下载安装包&#xff1a;gitg官网 进行安装 2&#xff0c;配置git环境&#xff1a; git config --global user.name "Your Name" git config --global user.email "Your Email"3&#xff0c;生成 SSH Key&#xff1a; ssh-keygen -t r…

使用chroma和LlamaIndex做RAG增强

RAG 原理&#xff1a;通过 “检索&#xff08;从知识库获取相关信息&#xff09;→ 增强&#xff08;将信息作为上下文输入模型&#xff09;→ 生成&#xff08;模型基于上下文回答&#xff09;” 三步&#xff0c;解决大模型知识时效性、领域局限性问题。 接下来将完成这么一个…

2025 最应避免的摄影陷阱以及解决方案

你有没有想过&#xff0c;当你拍完了一个完美的场景后&#xff0c;却发现画面模糊、光线不足&#xff0c;或者更糟的是&#xff0c;存储卡中的文件丢失了&#xff1f;这些问题可能会发生在任何人身上&#xff0c;无论是业余爱好者、专业人士还是最好的摄影师。当珍贵的记忆变成…

python类--python011

面向对象编程中的类的概念、属性使用、继承和类的改造问题等。7.1 初识类在软件编程中&#xff0c;面向过程和面向对象是两种主要的编程方法。面向过程的编程强调通过函数来实现特定的功能&#xff0c;具有灵活性&#xff0c;但在复杂系统中往往导致代码重复&#xff0c;维护困…

Python函数篇:从零到精通

一、函数1.1 为什么有函数我们对于一个项目时&#xff0c;会有上千甚至上万条代码&#xff0c;当我们要使用到某个函数时&#xff0c;例如我需要计算一个求和代码&#xff0c;获得求和的值来服务我们的项目&#xff0c;那我们可能会这样#计算1&#xff5e;100的和 theSun 0 fo…

QT项目之记事本

本文用QT实现记事本功能。一、成品展示1.界面主要元素&#xff1a;1.标题为MyNoteBook&#xff1b;2.相应图标为&#xff1a;打开文件&#xff0c;保存&#xff0c;退出&#xff1b;3.右下角标注光标所在行列&#xff0c;默认编码方式为UTF-8&#xff1b;4.鼠标所在图标位置时会…

【软件测试】性能测试 —— 工具篇 JMeter 介绍与使用

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录1. JMeter 的介绍2. JMeter 安装、配置、搭建2.1 前置条件 —— Java环境搭建2.2 JMeter 下载2.3 JMeter 安装…

二十二、Mybatis-快速入门程序

入门程序大概步骤叙述&#xff1a; 步骤一&#xff1a;创建springboot工程并且数据库提前创建表步骤二&#xff1a;创建springboot工程对Mybatis相关依赖注意打勾步骤三&#xff1a;编写查找方法步骤四&#xff1a;编写测试方法项目目录结构与数据库以及代码&#xff1a; 项目目…

Blender模拟结构光3D Scanner(一)外参数匹配

如何使用Blender模拟FPP(Fringe Projection Profilometry) 原理的结构光3D传感器&#xff1f;主要包含的工作有&#xff1a;1&#xff09;相机、投影仪定位与内外参数匹配&#xff1b;2&#xff09;投影仪投射指定Pattern图像&#xff1b;3&#xff09;被测物体材质属性配置等&…

LangChain是如何实现RAG多轮问答的

目录引言一、LangChain实现RAG多轮问答核心机制1. 对话历史管理&#xff08;Memory&#xff09;2. 问题重写&#xff08;Query Rewriting&#xff09;3. 检索增强生成&#xff08;RAG Core&#xff09;4. 链式工作流&#xff08;Chain&#xff09;二、关键设计特点三、完整示例…

DAY 44 预训练模型

知识点回顾&#xff1a; 预训练的概念常见的分类预训练模型图像预训练模型的发展史预训练的策略预训练代码实战&#xff1a;resnet18 一、预训练的概念 我们之前在训练中发现&#xff0c;准确率最开始随着epoch的增加而增加。随着循环的更新&#xff0c;参数在不断发生更新。 所…

Java Stream API 中常用方法复习及项目实战示例

在最近的练手项目中&#xff0c;对于stream流的操作愈加频繁&#xff0c;我也越来越感觉stream流在处理数据是的干净利落&#xff0c;因此写博客用来记录最近常用的方法以便于未来的复习。map() 方法map()是一个中间操作&#xff08;intermediate operation&#xff09;&#x…

从零开始手搓一个GPT大语言模型:从理论到实践的完整指南(一)

现在人工智能飞速发展时代&#xff0c;LLM绝对可以算是人工智能领域得一颗明珠&#xff0c;也是现在许多AI项目落地得必不可少得一个模块&#xff0c;可以说&#xff0c;不管你之前得研究领域是AI得哪个方向&#xff0c;现在都需要会一些LLM基础&#xff0c;在这个系列&#xf…

Redis ubuntu下载Redis的C++客户端

1. 安装 redis-plus-plus C 操作 Redis 的库有很多&#xff0c;这里选择使用 redis-plus-plus&#xff0c;这个库的功能强大&#xff0c;使用简单。 Github 地址&#xff1a;GitHub - sewenew/redis-plus-plus: Redis client written in C 访问不了Github 地址的可以使用Ste…