自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 收藏
  • 关注

原创 反射&枚举&以及lambda表达式

反射可以知道这个类中有哪些属性(名字),此时,就可以比较容易的通过一套代码,就能够兼容多种不同类型的类,只要告诉我这个类的 Class 对象是什么,按照 Class 对象里面该类的属性名,就可以知道这个字符串如何解析,如何构造还原出一个一样的对象出来。完全可以让用户输入,这个东西,可能来自于代码事先写好的,也可能 来自用户在控制台输入,还可能从文件读取,还可能通过一系列计数得出来的,还可能从网络读取的,程序跑起来之后/过程中获取到的"动态"=> 代码的"通用性",写一份代码,支持各种不同的情况。

2025-06-27 21:12:55 401

原创 Cookie 在 HTTP 中的作用&HTTP 中的状态码

有的重定向使临时的,过一段时间就不需要,有的重定向是永久性的,很多地方都会涉及到"重定向",呼叫转移,我换一个手机号,开通呼叫转移之后,此时有人打旧号码,自动被转移到新的号码上,访问一个就地址,重定向到新的地址上。这个就诊卡中就包含了患者的身份标识,在医院的系统中就会记录患者的详细信息(姓名,性别,年龄,电话,住址,既往病史,账户余额..)如果上述的详细信息,只是存储到就诊卡中,是不太合理的,万一丢了怎么办?点击广告,先产生请求,访问搜狗的计费服务器(搜狗已经被腾讯收购了,搜狗现在是腾讯的一个部门)

2025-06-25 19:27:18 929

原创 HTTP协议

一个广告主,投放广告的时候通常会投放多个平台,这些广告平台,都会给这个广告主的网站引流(引流的过程是需要"花钱"的,按点击收费),这个赚钱的能力是非常强的,商业价值高的广告,点击一下就几百块(付出的广告费用都可以赚回来)在十年前是有这样的情况的,事情非常多,广告主自己是不会改的,点击次数是一定的他要付的费用是一定的,只不过是付给谁多谁少的事情罢了,总金额不变。,多少次是来自 x 搜索引擎?一般正常的广告平台,有一系列的"反作弊"算法,识别出"无效点击"有效点击才计费,无效点击不会计费。

2025-06-23 21:33:49 979

原创 Map&Set

理想情况下,如果二叉搜索树,左右子树的个数都差不多,这个时候,此时的时间复杂度O(logN),二叉搜索树查找,关键的操作就是比较次数,比较次数和树的高度有关系, 如果二叉树左右子树比较均衡,高度就是 logn,如果出现不理想的极端情况,单枝树的情况,此时的查找就和链表的遍历差不多了,因此此时的时间复杂度是O(n)数组的二分查找,分出来的是两个部分,是"均匀"对于二叉搜索树来说,就不一定了.(二叉搜索树的左右子树包含的节点数可能不同,而且可能存在比较大的差异)有两个 Set: {1,2,3};

2025-06-16 21:19:36 732

原创 Map&Set

此处存在"空间不对等"问题.如果要存储的是任意整数,范围 42亿个.此时要创建的保存的数据的数组,范围 1w 个,此时,一定存在重复,两个不同的数据,映射到同一个数组下标上了(哈希冲突)哈希表,本质上是利用了数组下标操作比较高效的特点,实现的一个数据结构.通过哈希表,把要保存的内容,映射到数组下标上.如果出现冲突,在开散列的方式,来解决冲突(哈希表的设定是一个数学问题)会确保哈希函数计算的下标是准确位置, 使用一个链表,保存"冲突"的元素, 此时,这个数组的每个元素,都是"链表节点"

2025-06-15 21:12:12 939

原创 网络原理:网段划分

每个国家/地区,都会架设自己的 DNS 服务器(里面的映射关系数据,都是从主 DNS 服务器同步来的,这样的服务器也称为"镜像服务器"),国内,各种运营商就会在各个地区,架设镜像服务器,用户访问的时候,直接就在就近的 DNS 服务器即可,不只是运营商,知名的互联网公司,也会维护 DNS 服务器。思路一:访问某个网站的时候,不是每次访问都需要进行 DNS 访问,相邻的几次访问,域名和 IP 的映射关系是不会改变的,浏览器会对 域名解析的结果 进行缓存,引入的缓存,大幅度降低访问 DNS 服务器的频率。

2025-06-13 21:02:34 643

原创 网络层 IP协议(第二部分)

国内大力推展 IPv6 ,差不多 18 - 19年左右,川普,开启了中美贸易战,IPv4分配权在美国人手里面,据说是非盈利组织(背后的资方,其中就有美国军方),这样就变成了一张牌,成为美国人制裁咱们得手段,IPv4 的整个体系,都是美国人搭建的,美国人的话语权是非常大的,毁灭性打击。地址的范围扩大的倍数是,天文数字,哪怕数给地球上的每一粒沙子分配一个 IP 地址,都有多的,只要是人类文明没有走向星辰大海,只是在地球上,IPv6肯定是够用的(未必当时的IPv4也是这么想的)

2025-06-12 13:05:24 276

原创 网络层 IP协议(第一部分)

这样的替换,本质上是让一个局域网内部的所有设备,公用同一个 外网 IP(本来是一个外网 IP 代表一个设备,现在是一个外网设备代表数以千计个设备(和真实世界的地址类似))CSDN 的服务器,如果区分,收到的数据,是我电脑这边的客户端数据,还是我的平板的客户端数据,返回响应的时候,运营商路由器,怎么区分,把正确的包转发给正确的设备?进行 IP 数据报转发的时候,必须要根据目的 IP,进行转发,万一数据报中的目的 IP 是错误的,此时这个数据包是不可能到达对方的,也不应该在网络中被“无限的转发”

2025-06-11 20:58:56 824

原创 核心机制:面向字节流

URG :表示"紧急指针"有效,正常情况下,TCP 的数据都是"顺序传输" 1- 1000, 1001- 2000,...., 紧急指针意味着后面有一些数据要先传输(插队),紧急指针的值表示,从当前位置往后多少个字节位置的部分,要进行插队的(使用比较少)包的数据里面,不能包含分隔符,需要找到合适的符号,确保这个符号在正文中不会重复出现,即使 ascil 码表中,也有不少的字符,可以用来作为分隔符的,有一下特殊的"不可见字符"历史遗留问题。

2025-06-10 20:38:22 551

原创 核心机制:延时应答,捎带应答,面向字节流

包的数据里面,不能包含分隔符,需要找到合适的符号,确保这个符号在正文中不会重复出现,即使 ascil 码表中,也有不少的字符,可以用来作为分隔符的,有一下特殊的"不可见字符"历史遗留问题。=> 读到空白符就结束了,空白符是统称,包括但是不限于:空格,换行,回车,制表符,分页符,垂直制表符。普通的响应报文,ack 这一位是 0 确认序号是无效的,确认序号都是无效的,窗口大小这一位 无效,基于延时应答的基础上,提高传输效率的方案。接受方的应用程序,read 的时候,就有很多种 read 的可能性。

2025-06-05 22:42:33 354

原创 核心机制:拥塞控制

5.2)出现丢包,重新计算阈值(丢包窗口大小的 / 2),重阈值开始作为新的拥塞控制的窗口大小,继续线性增长(相比于旧版本,省略了指数增长的过程),使 tcp 的传输效率更加稳定,避免大起大落。2)慢启动之后如果不丢包,就会按照指数方式进行增长,短时间,快速的把窗口的大小给顶上去(刚开始的时候太小了)发生方的速率,不光要考虑接收方的速率,还要考虑传输路径,整个过程中所有的中间节点的情况。1)初始状态下,窗口的大小是非常小的,刚开始,网络的畅通情况是未知的。流量控制,已经接受方的处理能力,进行限制。

2025-06-04 22:18:59 336

原创 核心机制:流量控制

TCP 在设计的时候,充分的吸取了以前 UDP 的教训,选项中有一个"窗口扩展因子"发送方收到 ack 之后,设置滑动窗口大小 16位窗口大小 << 窗口扩展因子,左移一位相当于 * 2,是指数增长的,这样的窗口大小的取值范围是非常非常大的。所谓的"接收方的处理能力"就是接收方应用程序调用 read 的速度(调用 read 有多快,每次 read 多少) 调用 read 的速度和应用程序,代码咋写的 是直接相关的,想要直接衡量 read,还不太容易得。连接 connection 链接 link。

2025-06-03 21:12:47 389

原创 核心机制:滑动窗口

等待的一份时间中,就是在等待 4 组 ack 的到达,肯定不能完全不等(可靠性形同虚设了),就把批量发送多少数据不需要等待 称为"窗口大小"ack 的确认序号,表示序号之前的所有数据都已经收到了,ack => 1001, 1001 之前的数据都收到了。每次收到一个 ack,窗口都会往后平移一个格子,如果收到 ack 的速度很快,平移的过程就好像"滑动"的过程。滑动窗口的效率提高,本质是"亡羊补牢""止损",再怎么提高,也不会超过 UDP 无可靠传输机制的协议的。三次握手,建立连接(必须是 三次)

2025-06-02 13:09:31 314

原创 核心机制:TCP 断开连接(四次挥手)

收到对方发来的 FIN 的时候,就会返回 ACK,同时进入 CLOSE_WAIT 状态(可以理解成 wait close, 等待关闭,等待应用程序代码,调用 close),正常情况下,存在的时间比较少。实际上,三次握手,四次挥手,大部分工作都是内核来完成的,其实和实际代码关系不是很大存在的意义,更多的是让我们理解/调试程序。四次挥手之所以叫四次挥手,是因为中间的两次交互,是不一定触发合并的(有的时候会合并,有的时候不会)合并相比于不合并来说,更好,合并提高效率,一系列的封装和分用,都是需要有开销的。

2025-06-01 19:53:07 1077

原创 核心机制三:连接管理(三次握手)

TCP 中的握手,传输一个"打招呼"的数据包,这个数据包不携带任何"业务数据"(没有应用层的载荷),TCP 这个数据包自有报头,没有正文,也就是这个操作是不携带任何业务数据的。在数据进行多次交换传输的时候,可能会出现 其中的某个数据"迷路了"因为网络的一些延迟导致绕了很长的路经过了很长的时间才到达服务器。当 TCP 建立好了之后,传输的第一个数据包的第一个字节的编号,不是从 1 / 0 开始编排的。三次握手,建立连接的过程中,客户端和服务器要经过三次这样的"打招呼",连接才能在双方这边都建立好。

2025-05-31 22:41:01 724

原创 核心机制:确认应答和超时重传

通过重传之后,大幅度提升数据到达对方的概率,但是重传之后,还是没有收到 ack,只能说明,当前网络的丢包概率,远远不止 10%了,此时,网络大概率出现了非常严重的故障了,再次频繁重传,非但不会解决问题,甚至可能会加重网络的故障程度~~重传次数 / 总的重传时间是有上限的,到达上限,重传还没成功, tcp 连接就会被"重置"(重置涉及到"复位报文") => 单方面的断开连接了.发送方发送了数据之后,接受方,一旦接收到了,就会给发送方返回一个"应答报文"告诉发送方"我已经收到了数据"

2025-05-30 20:09:06 706

原创 TCP协议

报头的长度,报头中包含了“选项” optional =>可选择的,0 - 15 ,4个字节,TCP 报头的最大长度是 60 字节。发送方发送了数据之后,接受方,一旦接收到了,就会给发送方返回一个"应答报文"告诉发送方"我已经收到了数据"同一个 TCP 连接,序号会连续累加,下一个数据报的序号在上一个数据报的最后一个的序号基础上继续递增。编号是连续递增的,要知道 TCP 载荷的第一个字节的编号是多少,后面的每一个字节的编号就都知道了。确认序号根据收到的数据的最后一个字节的序号进行加一来进行填充。

2025-05-29 23:21:21 794

原创 UDP数据报

发送方,构造 UDP 数据报,构造完成之后,把数据报的每个字节的数据,都进行累加,结果累加到一个 16 位的整数上,溢出,就溢出此时得到的结果,就是校验和(check1),填充到 UDP 报头和字段。恰好是两个 比特位 发生翻转,导致翻转后算出来的校验和和翻转前的算出来的校验和碰巧是一样的呢?协议标准升级好,协议的具体实现,是在各个操作系统厂商手中的,需要这些厂商的配合你升级。如果发送的数据和接受的数据,每一个字节都是一致的,计算得到的校验和就一定是一致的。拆成多个之后,如果其中一部分丢包了怎么办?

2025-05-28 22:10:05 502

原创 Java多线程

正常情况下,一个线程,需要把入口方法执行完(需要通过"打断线程"的操作也需要线程本身,代码做出配合),才能使线程结束,有的时候,希望能够让这个线程提前结束(尤其是,线程在sleep 过程中)如果为 true 说明有人终止这个线程。上述的几种方式,本质上,都是 让线程 t 自己,决定自己是否要终止,相当于 main 只是给 t 提供了一个"提醒","建议" 不是"强制执行的"线程,执行了 start 之后,就是就绪状态/阻塞状态,对于 就绪状态/阻塞状态下的线程,不能再次 start。

2025-05-25 22:45:17 778

原创 JVM 的垃圾回收机制 GC

可达性分析中,JVM 会不停地使用线程扫描这些对象是否是垃圾,每隔一定的时间,就会扫描一次,如果一个对象扫描一次,不是垃圾,年龄就 + 1,一般来说年龄超过 15(可以配)的就进入老年代。这种方法,不需要引入额外的内存空间,但是需要消耗较多的时间,进行上述的扫描过程,这些扫描过程中也是容易触发 STW 的(时间换了空间),这里也不会涉及到"循环引用"比如 C 语言,已经存在了50年了,还可以预见这个 C 语言还有很大的希望在活50年,和 C 语言同时期的语言,都死的差不多了。

2025-05-24 19:03:45 1224

原创 JVM 双亲委派模型

比如自己写一个类,和标准库恰好重复了,java.lang.String 此时 JVM 保证加载的仍然是标准库的 String 而不是自己写的。ExtensionClassLoader 负责在 Java 的扩展库中进行查找(JDK 自己带的,但是不是标准约定的库)程序员在特定场景下,也可以实现自己的类加载器,自己实现的类加载器可以让他遵守,也可以不遵守。类加载第一个环节中,根据类的全限定类名(包名+类名)找到对应的.class 文件的过程。假设要加载一个,com.baidu.Test(自己项目中的类)

2025-05-23 18:33:39 567

原创 JVM类加载

给类对象,分配内存空间,此处申请的内存空间,是一个"未初始化" 的内存空间,空间上的每个字节全都是 0 (新申请的内存,自动设置为 0(消耗时间,换来的是程序不容易出错) )假设拿图片二进制文件,后缀改成 .class,如果验证的过程中,发现某个地方的格式存在问题,就需要及时报错,告知程序员。.class文件中,也会涉及到一些常量,常量也是要放到内存中的,需要把 .class 文件的常量加载到内存中。1)根据代码中编写的"全限定类名",找到 .class 文件(找的过程,叫做"双亲委派模型"(面试重点))

2025-05-22 23:00:18 428

原创 HTTP相关内容

直接把原始数据进行传输,比较大,消耗的网络带宽就多了,可以把数据进行压缩,压缩之后数据就变少了,通过网络传输的内容就少了,数据到达对端在通过 cpu 来继续解压缩,(压缩和解压缩是通过一系列算法来进行的)第一次访问搜狗,会把上述的所有资源都加载(CSS,JS,图片..保存到浏览器所在的机器的硬盘上),后面在访问搜狗的时候,只从服务器获取 html 即可,CSS,JS 直接用上次获取过的。关心 HTTP 交换过程的时候,需要关系 HTTP 请求是什么样子的,HTTP 响应是什么样子的(HTTP 的协议格式)

2025-05-21 21:51:02 902

原创 JVM的面试相关问题

3.通过 java 这样的命令行工具,运行对应的.class文件 java 命令行工具,对应到一个 java 进程,这个 java 进程就可以理解成一个 Java 虚拟机了(也可以叫 JVM 的进程),JVM 的进程,就会对,class 文件中的内容解释执行了。JVM 更准确额说是 Java语言的"运行时环境",核心功能就是把 Java 代码,翻译成计算机可以识别的机器指令(低效的,更高效的,像C/C++/Go,编译出来的程序就是标准的 CPU 构成的指令程序)

2025-05-20 23:27:39 1203

原创 HTTP协议

body 中是完全可以放 二进制 数据的(压缩的结果),之所以用 base64 转成文本,主要还是因为图片本身比较小,按照文本的方式,服务器代码处理起来好实现,(把二进制数据,用文本(ascil字符)进行从新编码,通过 4 个ascil字符,表示原来的 3 个字节的二进制数据)比如登录场景中,GET 的话,就会把用户名和密码显示到 URL 中,如果别人看一眼你的屏幕,就知道你的密码是啥.POST 的用户名和密码是放在 body 中的,别人看了你的屏幕也看不到。(这里还有其他情况)

2025-05-19 22:48:38 743

原创 HTTPS的工作过程

比如密钥是 key,使用另一个密钥 key2 针对 key 进行加密,把 key 密文传输给对端,但是如果不把 key2 告诉服务器,服务器也完成不了解密这个过程,拿不到 key,如果把 key2 传输给对方,这样黑客也就获取到了,成功完成套娃,脱裤子放屁,多此一举。有可能,但是是存在门槛的(nb的黑客都在公安机关备过的,不入流的也黑不进去),入侵运营商的设备,大概率是比入侵一个企业的机房要更加容易一些的,直接入侵了,不需要监听任何数据了,直接拖数据库。有一个数字 int a;随便拿一个数字 int k;

2025-05-18 18:30:29 716 2

原创 Thread类的基本用法

2.实现Runnable类,并重写run()方法。1.继承Thread类,并重写run()方法。Java创建线程时有,5中代码的编写方式。4.Runnable匿名内部类。3.Thread匿名内部类。

2025-03-27 12:07:37 191

原创 线程的状态

3)其他阻塞:调用线程的sleep()或者join()后,线程会进入到阻塞状态,当sleep超时或者join终止或者超时,线程重新转入就绪状态。2)同步阻塞:线程在获得synchronized同步锁失败,JVM会把线程放到锁池中,线程进入同步阻塞.1)等待阻塞:运行状态的线程执行wait方法,JVM会把线程放在等待队列中,使本线程进入阻塞状态.线程run(),main()方法执行结束,或者因为异常退出了run()方法,则该线程结束生命周期。与等待不同的是,不是无限制的等待,超时后自动返回。

2025-03-27 11:56:57 285

原创 线程与进程的区别和联系

2.线程:线程是操作系统中调度执行的基本单位.一个线程是一个"执行流",每个线程之间都可以按照顺序执行自己的代码,多线程"同时"执行多分代码.4.多进程同时执行时,如果一个进程崩溃,一般不会影响其他进程,而同一个进程内多个线程之间,如果一个线程崩溃,很有可能导致整个进程的崩溃.1.进程:进程是操作系统中资源分配的基本单位.进程是操作系统对正在运行程序的一种抽象,可以将进程看作程序的一次运行.2.进程之间是相互独立的,线程之间的资源则是共享的.1.一个进程可以包含多个线程,线程在进程的内部.

2025-03-26 20:19:34 269

原创 链表的插入(头插,尾插,指定位置插入)

【代码】链表的插入(头插,尾插,指定位置插入)

2025-01-14 14:19:44 148

原创 ArrayList与顺序表

1.线性表(linear list) 是n个具有相同特性的数据元素的有序数列.线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表,链表,栈,队列...线性表在逻辑上是线性结构的,也就是说是一条连续的直线.但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式储存。顺序表是用一段物理地址连续的储存单元依次存储数据的线性结构,一般情况下采用的数组储存.在数组上完成增删改查。ArrayList底层是一段连续的空间,并且可以动态扩容,是一个动态类型的顺序表。

2024-12-28 21:16:08 233

原创 Java 中的ArrayList常用方法总结

在指定的位置插入指定的元素。返回列表中最后一次出现的指定元素的索引,如果未找到则返回-1。返回列表中第一次出现的指定元素的索引,如果未找到则返回-1。从指定的位置开始,将指定集合中的所有元素插入到列表中。返回一个包含列表中所有元素的数组,数组类型为指定类型。将指定集合中的所有元素添加到列表的末尾。用指定的元素替换列表中指定位置的元素。移除列表中所有包含在指定集合中的元素。仅保留列表中包含在指定集合中的元素。返回一个包含列表中所有元素的数组。将指定的元素添加到列表的末尾。返回列表中指定位置的元素。

2024-12-22 23:00:55 1032

原创 Java中通过ArrayList扩展数组

与传统的数组不同,ArrayList 不需要预先指定大小,并且提供了许多方便的方法来操作集合中的元素。2. 扩容机制:当添加元素超过当前容量时,ArrayList 会创建一个新的数组,其大小为原数组的 1.5 倍(具体实现可能因Java版本而异),然后将原数组的元素复制到新数组中。数组(Array):在Java中,数组的大小是固定的,一旦创建就无法更改其大小。如果需要存储更多元素,必须创建一个更大的新数组,并将原数组的元素复制到新数组中。大小可变:ArrayList 可以动态调整大小,而普通数组大小固定。

2024-12-19 22:34:18 1011

原创 Java的应用场景

丰富的开源库和框架:Java 拥有庞大的开源社区,提供了丰富的库和框架,如 Apache Commons、Google Guava、Hibernate、JUnit 等。Java 的跨平台性、强大的性能和丰富的生态系统使其成为开发各种类型应用的理想选择。无论是企业级应用、移动应用、桌面应用,还是大数据处理、游戏开发、金融科技等领域,Java 都能提供高效、可靠的解决方案。Java 是一种广泛使用的编程语言,因其强大的功能、跨平台性和丰富的生态系统,在多个领域都有广泛的应用。1. Web 应用开发。

2024-12-18 21:30:18 688

原创 Java中的LIst

List subList(int fromIndex, int toIndex): 返回列表的子列表。E set(int index, E element): 替换指定位置的元素。boolean remove(Object o): 删除第一个匹配的元素。int indexOf(Object o): 返回第一个匹配元素的索引。E remove(int index): 删除指定位置的元素。提供了push(), pop(), peek()等方法。E get(int index): 获取指定位置的元素。

2024-12-17 21:17:17 918

原创 JavaSe部分总结

我们先来了解一下Java语言,JavaSE是Java编程语言的标准版,主要是来学习Java的基本语法,书写方式,以及一些简单的逻辑循环和判断,包括一些关键字,特殊类(抽象类),特殊的方法(static修饰的方法,final修饰的方法)等等,最重要的是Java语言是比较C语言和C++语言是比较简单的,Java是面向对象的语言,面向对象的语言的三大特性"封装","继承","多态",Java作为面向对象语言的一种,也是具有这样的特性的。1.逻辑类型:也就是boolean类型的"true""false"

2024-12-16 22:32:59 1087

原创 Java算法小练

对于数组 {1, 3, 5, 7, 9, 3, 5, 7, 11},最长的无重复子数组是 {1, 3, 5, 7, 9},长度为 5。当 n = 5 时,dp[5] = dp[4] + dp[3] + dp[2] = 7 + 4 + 2 = 13,输出13。当 n = 3 时,dp[3] = dp[2] + dp[1] + dp[0] = 2 + 1 + 1 = 4,输出4。子数组是连续的,比如[1,3,5,7,9]的子数组有[1,3],[3,5,7]等等,但是[1,3,7]不是子数组。

2024-12-15 19:17:24 591

原创 Java代码实现“杨辉三角“

创建一个二维数组triangle来存储杨辉三角的数值。数组的大小为rows x rows,因为杨辉三角的第i行有i+1个数字。杨辉三角(Pascal's Triangle)是一个经典的数学结构,其特点是每一行的数字是其上方两个数字之和。内层循环填充中间的数字,计算方法为上一行的左右两个数字之和。调用printTriangle方法打印生成的杨辉三角。其他位置的数字是其左上方和右上方数字之和。提示用户输入杨辉三角的行数,并读取输入。1. 使用二维数组存储杨辉三角的数值。每一行的开头和结尾的数字也是1。

2024-12-14 23:23:51 802

原创 Java中的包装类

虽然在这种情况下所有的类型都可以存放,但是在跟多的情况下我们只希望它只有一类数据类型比如数值型的是一类.而不是同时有这么多的类型.所以,泛型的主要目的:指定当前的容器,要有什么样的数据类型.让编译器去检查.此时,就需要把类型,作为参数传递.需要什么类型,就传入什么类型。一般的类和方法,只能使用具体的类型:要么就是基本类型,要么就是自定义的类.如果要编写可以应用与多种类型的代码,这种刻板的限制对代码的束缚就会非常大.注意的是:泛型只能接受类,所有的基本数据类型必须使用包装类!1.4装箱和拆箱的小题。

2024-12-13 23:36:07 753

原创 Java中的“泛型“

泛型允许我们在定义类、接口或方法时使用一个或多个类型参数,这些类型参数在使用时会被具体的类型替换。例如,List 是一个泛型接口,其中 E 是一个类型参数。泛型是Java中一个强大的特性,它通过提供类型参数增强了代码的类型安全性和重用性。类型参数不能是基本类型:例如,不能使用 List,只能使用 List。无界通配符 :表示任何类型。泛型类型信息在运行时不可用:由于类型擦除,运行时无法获取具体的类型参数信息。代码重用:泛型允许编写更通用的代码,可以处理不同类型的数据。

2024-12-12 21:19:29 790

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除