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

原创 泛型11.16
①泛型是Java5的新特性,属于编译阶段的功能。②泛型可以让开发者在编写代码时指定集合中存储的数据类型③泛型作用:1.类型安全:指定了集合中元素的类型之后,编译器会在编译时进行类型检查,如果尝试将错误类型的元素添加到集合中,就会在编译时报错,避免了在运行时出现类型错误的问题。2.代码简洁:使用泛型可以简化代码,避免了繁琐的类型转换操作。比如,在没有泛型的时候,需要使用 Object 类型来保存集合中的元素,并在使用时强制类型转换成实际类型,而有了泛型之后,只需要在定义集合时指定类型即可。
2024-11-16 00:51:00
471
原创 拷贝文件API
包括便捷的文件拷贝功能,能极大简化传统 IO 流的繁琐代码,是实际开发中常用的工具。手动读写字节,适合需要中间处理(如过滤数据)的场景,但代码较繁琐。是 Apache Commons IO 工具库提供的。
2025-07-30 00:45:56
191
原创 重写 与 重载
重写:指子类重新定义父类中已有的方法。要求方法名、参数列表、返回值类型完全相同,目的是改变父类方法的实现逻辑。重载:指在同一个类中,存在多个方法名相同但参数列表不同(参数个数、类型或顺序不同)的方法。返回值类型可以不同,目的是让方法根据不同参数完成类似功能。
2025-07-23 23:46:17
187
原创 static 关键字的 特殊性
static 关键字的 “特殊性” 主要体现在其与类、对象的绑定关系,以及由此带来的一些反常规规则,具体如下:类名.成员thissuperthis。
2025-07-23 23:45:28
249
原创 希尔排序cc
希尔排序(Shell Sort)是插入排序的一种改进版本,它是第一个突破O(n²)的排序算法,核心思想是利用步长序列对数据进行分组,在每个分组内使用插入排序,逐步减小步长直到为1,完成最终排序。希尔排序时元素会大跨度移动,解决了 插入排序 在处理大规模乱序数组 效率低下的问题,让元素更快移动到正确位置。
2025-07-23 23:13:23
783
原创 直接插入排序和冒泡排序
直接插入排序:将数列分为“已排序”和“未排序”两部分,每次从“未排序”部分取一个元素,插入到“已排序”部分的合适位置,使“已排序”部分始终保持有序。就像水中的气泡逐渐上浮,每一轮都会让一个最大(或最小)的元素移动到最终位置。- 直接插入排序:将数列分为“已排序”和“未排序”两部分,每次从“未排序”部分取一个元素,插入到“已排序”部分的合适位置,使“已排序”部分始终保持有序。- 直接插入排序:逐个处理未排序元素,将其与已排序部分的元素从后往前比较,找到插入位置后移动元素并插入,只需遍历一次未排序部分。
2025-07-22 11:23:10
196
原创 TCP 协议
第三次握手时客户端再发送对服务器 ISN 的确认号,通过这样的交互,双方完成了初始序列号的同步和连接的建立。ACK 是 TCP 报文中的一个标志位,同时也代表报文中携带的确认号字段。当 ACK 标志位被设置时,表明这个 TCP 报文是一个确认报文,用于告知发送方数据已被成功接收,或者对连接建立请求等进行确认。,就像跟服务器喊:“我是客户端,想连你,这是我要开始传数据的序号标记(ISN),准备好接我消息不~”ISN 是 TCP 连接中,客户端或服务器随机选择的一个 32 位的数值,作为数据传输时的。
2025-07-16 00:53:39
768
原创 java.net.InetAddress
是 Java 对网络中主机 IP 地址的 “高层表示” ,为网络编程提供基础的地址封装能力,在。它封装的核心信息包括主机的 IP 地址和主机名 / 域名(不包含端口信息)。类的主要作用是作为 Java 对网络中主机 IP 地址的高层表示,封装主机的网络标识信息,为。(UDP 数据报 )等网络相关类的使用中,常作为地址标识支撑功能实现。调用后返回的对象中封装了本机的 IP 地址和主机名信息。类获取本机的 IP 地址和主机名并打印,需处理可能的异常。返回的是对应主机的主机名或域名(如本机可能返回电脑名,
2025-07-13 23:59:07
605
原创 通信子网 V
通信子网由硬件设备和控制协议通信链路:如光纤、双绞线、无线信道等,用于传输数据的物理介质,其核心资源是 “带宽”(单位时间内可传输的数据量);网络节点:如路由器、交换机、集线器等,负责数据的转发、交换和路由选择,核心资源是 “处理能力”(如每秒转发数据包的数量);协议与软件:如路由协议(OSPF、RIP)、拥塞控制协议(TCP)等,用于协调设备运行,确保数据有序传输。
2025-07-13 23:23:30
278
原创 网络编程 JAVA
网络编程是指利用计算机网络实现程序之间通信的一种编程方式。在网络编程中,程序需要通过网络协议(如 TCP/IP)来进行通信,以实现不同计算机之间的数据传输和共享。地址和端口号定位后,如何保证数据可靠高效的传输,这就需要依靠通信协议了。:定位计算机上的某个进程(某个应用)IP 地址:定位网络中某台计算机。1. 什么是网络编程?2. 三个基本要素。
2025-07-13 22:32:39
157
原创 JAVA 反射总结
-反射入口,代表类的字节码对象类名.class - 代表构造方法,用于创建对象 - 代表成员方法,用于调用方法 - 代表成员变量,用于获取/设置变量值。
2025-07-13 15:46:18
259
原创 通过反射,提取 Cat 类 泛型 父类 接口 属性 的具体类型参数
Cat.classClass调用拿到带泛型信息的父类类型;判断并转换为,再用提取泛型参数。
2025-07-13 15:07:35
493
原创 双亲委派机制
双亲委派机制是Java类加载的核心流程,包含"向上委托"和"向下尝试"两个阶段:类加载器先逐级向上委托父加载器处理请求,只有父加载器无法完成时才会自行加载。这种设计确保了核心类库的安全性,防止恶意代码冒充基础类;同时避免了类的重复加载,保证了类在JVM中的唯一性。通过层级化的委托机制,既维护了Java运行环境的稳定性,又实现了类加载的高效管理。
2025-07-13 14:31:47
187
原创 JVM 类加载过程
类加载器:用 “双亲委派” 保证类加载安全,避免核心类被篡改。链接阶段:验证字节码合法性 → 给静态变量分配内存 → 把符号引用转成内存地址。初始化:执行静态逻辑,给静态变量赋最终值,让类真正 “激活”。
2025-07-12 23:56:30
587
原创 Java反射v1
2. 后期学习的大量的java框架,底层都是基于反射机制实现的,所以必须掌握(要能够数量的使用反射机制中的方法)。* java.lang.reflect.Constructor:Constructor类型的实例代表类中的构造方法。* java.lang.Class:Class类型的实例代表硬盘上的某个class文件。* java.lang.reflect.Filed:Filed类型的实例代表类中的属性/字段。* java.lang.reflect.Method:Method类型的实例代表类中的方法。
2025-07-12 14:34:34
304
原创 线程通信V
当调用了obj.wait()之后,在obj对象上活跃的所有线程进入无期限等待。* 5. 调用wait方法和notify相关方法的,不是通过线程对象去调用,而是通过共享对象去调用。* 而且唤醒后,会接着上一次调用wait()方法的位置继续向下执行。* wait(毫秒,纳秒):调用此方法,线程进入“超时等待状态”* wait(毫秒):调用此方法,线程进入“超时等待状态”* wait():调用此方法,线程进入“等待状态”7.调用wait()方法后,会释放锁。
2025-07-11 22:03:34
258
原创 线程安全问题
(尤其是基本数据类型不存在线程安全问题 ,如果是引用数据类型,就另说了)* 静态变量也可能存在线程安全问题。* 实例变量可能存在线程安全问题。* 1. 什么情况下需要考虑线程安全问题?* 条件3:共享数据涉及到修改的操作。* 局部变量不存在线程安全问题。* 条件1:多线程的并发环境下。* 条件2:有共享的数据。
2025-07-11 17:12:35
220
原创 Java多线程 part2 方法
调用join方法的那个线程结束了。* 4. t.join()方法其实是让当前线程进入阻塞状态,直到t线程结束,当前线程阻塞解除。* 3. 假设在main方法(main线程)中调用了 t.join(),后果是什么?* 第二:sleep方法可以指定睡眠的时长,join方法不能保证阻塞的时长。* 2. join()方法是一个实例方法。* 第三:sleep和join方法都是让当前线程进入阻塞状态。* 第一:sleep方法是静态方法,join是实例方法。* 1. 调用join()方法完成线程合并。
2025-07-11 16:41:20
338
原创 Java多线程 part1
根据Java虚拟机规范,线程共享的内存部分包括堆、方法区(含运行时常量池),如果Java程序启动了10个线程,它们会共享同一个堆和方法区。每个线程都有自己独立的虚拟机栈,用于存储方法调用时的压栈、弹栈信息;JVM进程启动后,会先启动主线程,主线程由JVM启动,它的作用是调用main方法,也就是说main方法的运行是在主线程中进行的。在main方法执行过程中,程序员可以自己创建线程对象并启动,甚至能启动100个线程,这些操作都可以在main方法里通过编写代码完成,这样Java程序就会处于多线程环境中。
2025-07-10 21:45:40
139
原创 浅克隆 深克隆
使用ByteArrayInputStream和ByteArrayOutputStream:通过字节数组流完成对象的深克隆。- 序列化和反序列化:将对象写入文件(或其他流)后再读取恢复,可生成多个独立对象,属于深克隆。- 深克隆:完全复制对象及对象中所有引用类型字段指向的 对象, 形成独立的新对象。- 重写Object类的clone()方法,通过层层克隆引用类型字段实现深克隆。- 浅克隆:复制对象本身,但对象中的引用类型字段仍指向原对象的引用。
2025-07-10 20:58:05
234
原创 设计模式1
核心目的:处理对象的创建机制,在不暴露创建逻辑的前提下,灵活创建对象,使系统独立于对象的创建、组合和表示。- 常见模式:观察者模式、策略模式、迭代器模式、命令模式、模板方法模式、状态模式、中介者模式等。- 举例:工厂模式通过统一接口创建不同产品(如不同品牌的手机),无需直接new对象,降低耦合。- 常见模式:单例模式、工厂模式(简单工厂、工厂方法、抽象工厂)、建造者模式、原型模式。- 常见模式:装饰器模式、适配器模式、代理模式、组合模式、外观模式、桥接模式、享元模式。
2025-07-10 17:59:28
147
原创 资源绑定方法
1. 首先通过 ResourceBundle.getBundle(...) 方法获取资源绑定器对象(即 ResourceBundle 实例,简称 Bundle 对象);2. 然后调用该 Bundle 对象的 getString(key) 方法,传入资源文件中的键(key),即可获取对应的值。
2025-07-10 17:47:31
274
原创 serialVersionUID
以保证序列化兼容性?举例说明哪些类修改会导致必须变更版本号,哪些修改可以保持版本号不变?,无论类如何修改(比如删除核心字段、修改方法参数),反序列化都能成功。的类需要长期维护(可能频繁修改字段或方法),你会如何处理。的作用,以及为什么不建议依赖 JVM 自动生成它?,再尝试反序列化会发生什么?判断对错并说明理由:“只要显式定义了。仅保证 “版本标识一致”请解释 Java 中的。对象序列化后,修改类为。已知如下类定义,当对。
2025-07-10 14:45:07
258
原创 序列化 反序列化 Object input stream
ObjectInputStream(对象输入流)和ObjectOutputStream(对象输出流)是Java中用于对象序列化和反序列化的IO流,主要功能是将对象在内存与存储设备(如文件)或网络之间进行转换。- ObjectOutputStream:将内存中的Java对象转换为字节序列(序列化),以便写入文件、通过网络传输等。- ObjectInputStream:将字节序列恢复为原来的Java对象(反序列化),从文件或网络中读取并重建对象。
2025-07-10 14:12:57
316
原创 输出输入流的记法,以程序为核心
相关类: InputStream 、 DataInputStream 等,核心方法是 read() (把外部数据读到程序里)。总结:Output → 写(出),Input → 读(入),记住“以程序为中心”的方向就好啦。- Output(输出流):数据从程序流向外部(如文件、网络),对应“写”操作。- 比如:程序生成数据后,用输出流“写”到文件里,就是输出操作。- Input(输入流):数据从外部流向程序,对应“读”操作。- 比如:程序通过输入流“读”取文件内容,就是输入操作。
2025-07-10 12:04:53
327
原创 DataInputStream DataOutputStream
在Java中, DataInputStream (数据输入流)、 DataOutputStream (数据输出流)是处理基本数据类型的数据流,- 作用:从输入流中读取由 DataOutputStream 写入的基本数据类型或字符串,需按写入顺序读取,否则会出错。- 读写顺序必须一致,否则会导致数据解析错误(例如先写int再写double,读时也必须先读int再读double)。- writeUTF(String s) :写入UTF-8编码的字符串。- readUTF() :读取UTF-8编码的字符串。
2025-07-10 12:03:44
258
原创 IO 问题 1
数组的大小(比如 1024、4096),大小不合适可能影响效率(太小则 IO 频繁,太大则浪费内存);通过 “攒一波再写”,能把 IO 次数从 “数组写入次数” 降到 “缓冲区满的次数”,尤其在。数组时,已经能通过数组实现一定的批量写入(类似缓冲效果),那为什么还要用。内部自带固定大小的缓冲区,无论你写入的是单个字符、字符串还是。内置了经过优化的默认缓冲区大小,无需手动调整,更省心。数组只是 “一次写入的数据量”,但每次调用。写单个字符时,每次都会触发 IO,效率极低。数组能实现 “批量写入”,但它和。
2025-07-09 23:15:33
482
原创 ThreadLocal与JDBC工具类2.0
ThreadLocal用于保存某个线程共享变量,原因是在Java中,每一个线程对象中都有一个ThreadLocalMap<ThreadLocal, Object>,其key就是一个ThreadLocal,而Object即为该线程的共享变量。JDK 1.2的版本中就提供java.lang.ThreadLocal,为解决多线程程序的并发问题提供了一种新的思路。对于同一个static ThreadLocal,不同线程只能从中get,set,remove自己的变量,而不会影响其他线程的变量。
2025-07-09 22:50:29
118
原创 JDBC工具类
注意:工具类仅对外提供共性的功能代码,所以方法均为。* 2、对外提供在连接池中获取连接的方法。* 3、对外提供回收连接的方法。* 1、维护一个连接池对象。
2025-07-09 13:01:49
203
原创 连接池 JDBC
连接池就是数据库连接对象的缓冲区,通过配置,由连接池负责创建连接、管理连接、释放连接等操作。预先创建数据库连接放入连接池,用户在请求时,通过池直接获取连接,使用完毕后,将连接放回池中,避免了频繁的创建和销毁,同时解决了创建的效率。当池中无连接可用,且未达到上限时,连接池会新建连接。池中连接达到上限,用户请求会等待,可以设置超时时间。
2025-07-09 12:44:01
265
原创 JDBC 主键回显
在数据中,执行新增操作时,主键列为自动增长,可以在表中直观的看到,但是在Java程序中,我们执行完新增后,只能得到受影响行数,无法得知当前新增数据的主键值。在Java程序中获取数据库中插入新数据后的主键值,并赋值给Java对象,此操作为主键回显。明确传了让插入操作返回自动生成的主键(如自增 ID ),后续用能拿到主键结果集。创建preparedStatement对象,传入需要获取生成的主键列值,返回的是resultSet,在结果集中获取主键列值。
2025-07-09 12:34:45
230
原创 ORM对象封装
ORM 思想基础:将数据库表记录转为 Java 对象EmployeeResultSetemp_idsetterEmployeeList。
2025-07-09 12:04:20
409
原创 PreparedStatement
无论用 Statement 还是 PreparedStatement,拿到。,预编译 SQL ,支持参数化(、可复用,提升性能与安全性。
2025-07-09 11:50:57
168
原创 JDBC操作数据库1
本机 默认端口可不写 直接是 jdbc:mysql:///数据库名.MySQL 8.0+ 版本可省略这一步(驱动会自动加载)似 “临时表”,存储查询结果,需用。
2025-07-09 11:17:31
1021
原创 jdbc笔记
关系型数据库,按特定格式由数据库管理系统维护,以库、表分隔数据,表用行和列存储,区分同格式不同值数据。1. 开发 Java 程序时,数据默认存内存,程序停止/重启数据丢失,需解决长期存储问题。- I/O 流存本地磁盘,实现持久化,但数据无结构逻辑,难管理维护。
2025-07-08 14:28:56
313
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人