
Java
文章平均质量分 89
Java
pan_junbiao
这个作者很懒,什么都没留下…
展开
-
Java多线程的同步:synchronized关键字、Lock接口、volatile关键字
Java 多线程同步是解决资源共享冲突的核心机制,主要通过协调线程对共享资源的访问顺序与权限,避免数据不一致和竞态条件。在多线程的环境中,经常会碰到数据的共享问题,即当多线程需要访问同一个资源时,它们需要以某种顺序来确保该资源在某一时刻只能被一个线程使用,否则,程序的运行结果将会是不可预料的,在这种情况下就必须对数据进行同步。例如多个线程同时对同一数据进行写操作。原创 2025-05-16 10:54:46 · 693 阅读 · 0 评论 -
Java创建多线程的3种方法:继承Thread类、实现Runnable接口、实现Callable接口
线程(Thread)是程序的执行单元,一个进程内可包含多个线程。利用多核 CPU 并行执行任务(如并发计算、批量处理)。主线程不阻塞(如 GUI 界面后台加载数据)。共享进程资源(内存、文件句柄),减少上下文切换开销。Java 多线程通过并发执行提升程序效率,核心实现方式包括:Thread、Runnable 和 Callable,需注意线程安全问题(同步机制)。实际开发中优先使用线程池和并发工具类(如 JUC 包)简化编码并优化性能。原创 2025-05-11 10:39:31 · 588 阅读 · 0 评论 -
SpringBoot整合POI实现Excel文件的导出与导入
Apache POI 是一个基于 Java 的开源库,专为读写 Microsoft Office 格式文件(如 Excel、Word、PowerPoint、Visio 等)而设计,支持 Office 97-2016 版本的文件操作。其名称源于“Poor Obfuscation Implementation”(简洁版的模糊实现)的首字母缩写。Apache POI 功能全面,覆盖 Office 文件的全生命周期操作。社区活跃,文档丰富,适用于复杂场景(如:模板替换、动态生成报表)。原创 2025-04-15 20:06:07 · 1136 阅读 · 0 评论 -
Java中String、Array、List的相互转换工具类
在 Java 语言中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象。String 类是不可变(final)的,对 String 类的任何改变,都是返回一个新的 String类对象。数组是具有相同数据类型的一组数据的集合。数组中的每个元素具有相同的数据类型。在 Java 中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组等。原创 2025-04-06 20:39:47 · 663 阅读 · 0 评论 -
Java数组
数组是具有相同数据类型的一组数据的集合。例如,球类的集合——足球、篮球、羽毛球等;电器集合——电视机、洗衣机、电风扇等。在程序设计中,可以将这些集合称为数组。数组中的每个元素具有相同的数据类型。在 Java 中同样将数组看作一个对象,虽然基本数据类型不是对象,但由基本数据类型组成的数组却是对象。在程序设计中引入数组可以更有效地管理和处理数据。可根据数组的维数将数组分为一维数组、二维数组等。原创 2025-04-06 18:02:30 · 815 阅读 · 0 评论 -
Java中的String,StringBuilder,StringBuffer区别
本文详细解析了 Java中 String,StringBuilder 和 StringBuffer 的区别,主要从运行速度和线程安全两个方面进行了对比。String适用于少量字符串操作,StringBuilder适用于单线程大量操作,StringBuffer适合多线程大量操作。原创 2025-04-02 16:42:31 · 349 阅读 · 0 评论 -
Java中String字符串的常用方法
在 Java 语言中将字符串作为对象来管理,因此可以像创建其他类对象一样来创建字符串对象。String 类是不可变(final)的,对 String 类的任何改变,都是返回一个新的 String类对象。这样的话把 String 类的引用传递给一个方法,该方法对 String 的任何改变,对原引用指向的对象没有任何影响,这一点和基本数据类型相似。Java 的 String 通过不可变性设计保障安全性与效率,但其操作需注意对象复用及性能优化。开发者应掌握常量池机制、常用方法及不可变特性,合理选择拼接策略以提升代原创 2025-04-02 16:18:46 · 284 阅读 · 0 评论 -
Jackson实现JSON数据的合并
Jackson 库实现 JSON 数据的合并,可以采用基于树模型的深度合并(递归策略),可以保留两个 JSON 的所有层级数据,避免覆盖冲突。在实际开发中,Jackson 功能丰富、安全可靠并且具有比较好的兼容性,这让程序开发人员可以很方便地实现 JavaBean 和以 “键 : 值” 结构保存的 JSON 数据的相互转换。原创 2025-03-24 19:53:27 · 383 阅读 · 0 评论 -
Jackson使用ArrayNode对象实现JSON列表数据(二):增、删、改、查
Jackson 库中的 ArrayNode 数组节点类是用于表示 JSON 数组的可变节点类,继承自 JsonNode,专为动态构建和操作 JSON 数组设计。支持动态添加、删除数组元素,与只读的 JsonNode 形成对比,可存储混合类型元素(如字符串、数值、嵌套对象或其他数组),常与 ObjectNode 配合构建复杂 JSON 结构。ArrayNode 数组节点类也是 JsonNode 中的一个常用子类,甚至 JsonNode 提供的个别方法就是专门为 ArrayNode 数组节点设计的。原创 2025-03-24 18:07:06 · 1104 阅读 · 0 评论 -
Jackson使用ObjectNode对象实现JSON对象数据(一):增、删、改、查
Jackson 库中的 ObjectNode 对象节点类是操作 JSON 对象的核心类,可实现动态的增删改查操作。ObjectNode 对象节点是 JsonNode 中比较常用的一个子类。如果以 “键 : 值” 结果保存的 JSON 数据中的某个节点也是一个以 “键 : 值” 结构保存的 JSON 数据,那么这个节点就用 ObjectNode 表示。原创 2025-03-23 17:11:20 · 1144 阅读 · 0 评论 -
Jackson的核心类与API方法:ObjectMapper、JsonNode、ObjectNode、ArrayNode
Jackson 不仅是一个基于 Java 语言的、开源的 JSON 解析库,也是 Spring Boot 默认使用的 JSON 解析库。为什么 Spring Boot 会默认使用 Jackson 呢?这是因为在 spring-boot-starter-web 依赖包中已经依赖了 Jackson 的依赖包(即:jackson-databind)。在实际开发中,Jackson 功能丰富、安全可靠并且具有比较好的兼容性。原创 2025-03-23 15:23:51 · 1017 阅读 · 0 评论 -
Java中迭代器(Iterator)的使用
在 Java 中,迭代器(Iterator)是集合框架中用于遍历集合元素的一种机制。它提供了一种统一的方式来访问集合中的元素,而不需要了解底层集合的具体实现细节。迭代器是一个对象,用于按顺序访问集合中的元素。它提供了访问集合元素的标准方法,而不必暴露集合的内部结构。迭代器位于 java.util 包中,是一个接口。迭代器简化了集合的遍历过程,使得代码更加简洁和易于维护。原创 2025-03-15 09:56:02 · 260 阅读 · 0 评论 -
Java时间戳的使用
时间戳(timestamp)是一个能够表示一份数据在某个特定时间点已经存在的、完整的、可验证的数据,通常是一个字符序列,唯一地标识某一刻的时间。它广泛应用于数据库、计算机系统、文件系统、软件以及通信等领域,用于确保数据的完整性和一致性,以及追踪数据的变化。时间戳的生成通常依赖于系统的时钟和时区设置,因此在全球范围内使用时需要注意时区差异和时钟同步问题。此外,为了确保时间戳的准确性和可信度,一些系统可能会采用第三方时间戳服务或硬件时间戳设备来生成和管理时间戳。原创 2024-11-06 16:58:09 · 566 阅读 · 0 评论 -
Java中的日期与时间的间隔:Period类、Duration类
在 Java 中,Period 类和 Duration 类都是用于表示时间间隔的类,但它们有不同的使用场景和特性。Period 类位于 java.time 包中,主要用于表示基于日期的时间间隔,即年、月、日的差异。它常用于处理日期之间的计算,例如计算两个日期之间的年数、月数和天数。Duration 类同样位于 java.time 包中,但它用于表示基于时间的时间间隔,即天、小时、分钟、秒、毫秒、纳秒的差异。它常用于处理时间之间的精确计算,例如计算两个时间点之间的差值。原创 2024-11-05 17:28:20 · 775 阅读 · 0 评论 -
Java中的时刻与时间戳:Instant类
Instant 类是 Java 8 引入的 java.time 包的一部分,用于表示一个时间点,通常以 UTC(协调世界时)时区表示。它提供了一种更加精确和灵活的时间表示方式,替代了旧的 java.util.Date 类。通过获取Instant 的对象可以获取此刻的时间,该时间由两部分组成:从1970-01-01 00:00:00 开始走到此刻的总秒数 + 不够1秒的纳秒数。原创 2024-11-05 15:28:19 · 798 阅读 · 0 评论 -
Java中的日期与时间格式化器:DateTimeFormatter类
DateTimeFormatter 是 Java 8 引入的一个类,属于 java.time.format 包,用于格式化(解析和打印)日期和时间对象。它提供了丰富的格式化模式,可以灵活地处理各种日期和时间格式。Java 中的 DateTimeFormatter 与 SimpleDateFormat 都是用于日期和时间格式化的工具类,但它们之间存在一些显著的区别。使用旧的 Date 对象时,我们通常使用 SimpleDateFormat 进行格式化显示。原创 2024-11-04 16:50:52 · 1144 阅读 · 0 评论 -
Java中的时区和带时区的时间对象:ZoneId类、ZonedDateTime类
在 Java 中,ZoneId 和 ZonedDateTime 是处理时区和带时区日期时间的重要类,它们属于 java.time 包,这个包是在 Java 8 中引入的,用于替代旧的日期和时间 API(java.util.Date、java.util.Calendar 等)。ZoneId 类表示时区信息,例如 "UTC"、"Asia/Shanghai"、"America/New_York" 等。它提供了获取时区偏移量、时区规则以及验证时区 ID 的方法。原创 2024-11-04 15:22:19 · 595 阅读 · 0 评论 -
Java中的日期与时间对象:LocalDate类、LocalTime类、LocalDateTime类
在 Java 中,LocalDate、LocalTime 和 LocalDateTime 是 java.time 包中的类,用于表示日期、时间和日期时间。这些类提供了不可变的日期与时间对象,是 Java 8 及以后版本中引入的一部分,用于替代旧的 java.util.Date 和 java.util.Calendar 类。LocalDate 类表示不带时间的日期,即年、月和日。LocalTime 类表示不带日期的时间,即小时、分钟、秒和纳秒。原创 2024-11-02 20:08:36 · 1521 阅读 · 0 评论 -
Java中的日期与时间对象:Date类、SimpleDateFormat类、Calendar类
在 Java 中,Date 类是 java.util 包的一部分,用于表示一个特定的瞬间,精确到毫秒。这个类封装了当前的日期和时间。不过,从 Java 8 开始,引入了新的日期和时间 API(位于 java.time 包中),提供了更现代、更灵活的日期和时间处理功能。尽管如此,了解 Date 类仍然对理解 Java 早期版本中的日期和时间处理很有帮助。Java 的 Calendar 类是 java.util 包中的一个抽象类,提供了操作日历字段如年、月、日、时、分、秒等的方法。原创 2024-11-01 18:28:47 · 970 阅读 · 0 评论 -
Java使用apache.commons.io框架下的FileUtils类实现文件的写入、读取、复制、删除
Apache Commons IO 是 Apache 开源基金组织提供的一组有关IO(Input/Output)操作的小框架,它是 Apache Commons 项目的一部分,专注于提供简单易用的 API,用于处理输入和输出操作。Apache Commons IO 是一个功能强大的 Java IO工具库,提供了丰富的 API 来简化文件和流的操作。通过使用 Commons IO 库,开发者可以更加简洁、高效地完成文件和流的相关任务。原创 2024-10-30 18:52:56 · 1309 阅读 · 0 评论 -
Java使用JWT实现Token认证机制
JWT(JSON Web Token)是一种用于在网络上安全地传输信息的简洁的、URL 安全的表示方法,它定义了一个紧凑且自包含的方式,用于不同实体之间安全地传输信息(JSON格式)。JWT 通常由三部分组成,分别是 Header(头部)、Payload(有效载荷)和 Signature(签名)。JWT是一种简单、安全、便捷的身份验证和授权机制,在现代Web应用程序中得到广泛应用。然而,在使用JWT时也需要注意其安全性问题,并采取相应的措施来确保JWT的安全性和完整性。原创 2024-10-29 17:56:02 · 2378 阅读 · 0 评论 -
Java非对称加密:RSA 数据加密与解密、数字签名与验签
非对称加密(asymmetric cryptography),也称为公开密钥加密(public-key cryptography),是密码学中的一种重要算法。非对称加密使用一对密钥进行加密和解密操作,这两个密钥分别是公开密钥(public key)和私有密钥(private key)。公开密钥可以公开给任何人使用,而私有密钥则必须保密,只有密钥的持有者才能访问。这两个密钥之间存在数学上的联系,但不能从一个推导出另一个。原创 2024-10-28 18:05:19 · 1648 阅读 · 0 评论 -
Java对称加密:AES 高级加密标准
AES(Advanced Encryption Standard),即高级加密标准,是一种对称加密算法,被广泛应用于信息安全领域,保护敏感信息的安全。AES 算法基于迭代和分组密码设计,通过一系列的加密操作,将明文转化为密文。其加密流程主要包括字节代换、行移位、列混合和轮密钥加变换等步骤。解密过程为加密过程的逆过程。AES 主要有两种加密模式:ECB 与 CBC 是两种不同的加密模式,它们在处理明文块的方式上存在显著差异,从而影响了其安全性和适用场景。原创 2024-10-25 16:51:27 · 873 阅读 · 0 评论 -
Java对称加密:DES、3DES 数据加密标准
对称加密,又称对称密钥加密或私钥加密,是一种在加密和解密过程中使用相同一个密钥的加密算法。这种加密方式的核心在于,发送方使用某个密钥对数据进行加密,接收方则使用完全相同的密钥对数据进行解密。由于加密和解密使用的是同一把“钥匙”,因此得名“对称加密”。对称加密是一种强大且高效的加密方式,但其安全性高度依赖于密钥的安全管理。因此,在实际应用中,需要采取额外的安全措施来保护密钥的安全,如使用密钥分发协议、密钥托管服务等。原创 2024-10-24 09:36:09 · 1090 阅读 · 0 评论 -
Java消息摘要:SHA 验证数据完整性、密码的加密
SHA(Secure Hash Algorithm,安全散列算法)是一个密码散列函数家族,被美国国家安全局(NSA)设计,并由美国国家标准与技术研究院(NIST)发布为联邦数据处理标准(FIPS)。SHA 算法是基于 MD4 算法实现的,作为 MD 算法的继任者,成为新一代的消息摘要算法的代表。SHA 与 MD 算法不同之处主要在于摘要长度,SHA 算法可以生成一个被称为消息摘要的160位(20字节)散列值,而 MD5 的固定长度为128位(16字节)。原创 2024-10-21 17:11:52 · 691 阅读 · 0 评论 -
SpringBoot使用RestTemplate实现发送HTTP请求
RestTemplate 是 Spring 框架提供的一个用于访问 RESTful 服务的客户端工具,它简化了与 RESTful 服务的交互,并提供了一系列方便的方法来发送 HTTP 请求、处理响应以及处理错误。RestTemplate 提供了一组简单易用的方法,使得发送HTTP请求变得非常简单和直观。RestTemplate 可以自动将请求和响应的 JSON/XML 数据转换为 Java 对象,简化了数据的处理过程。原创 2024-10-19 18:06:22 · 1576 阅读 · 0 评论 -
Java使用HttpClient5实现发送HTTP请求
HttpClient5 是 Apache HttpComponents 项目中的一个重要组件,它是一个功能齐全且高度可定制的 HTTP 客户端库,专门用于发送 HTTP 请求、处理 HTTP 响应并支持各种 HTTP 协议特性。内置的连接池机制能提高并发处理性能,减少资源消耗。内置 Cookie 管理功能,能够自动处理服务端返回的 Cookie 并在后续请求中使用,模拟浏览器行为。HttpClient5 的设计高度模块化,用户可以根据需要对连接管理、重定向策略、请求重试策略、代理设置等进行灵活定制。原创 2024-10-18 18:10:28 · 1276 阅读 · 0 评论 -
Java使用原生HttpURLConnection实现发送HTTP请求
HttpURLConnection 是 Java 提供的原生标准的用于发送 HTTP 请求和接收 HTTP 响应的一个类,它位于 java.net 包下,并继承了 URLConnection 类。HttpURLconnection 是基于 HTTP 协议的,支持 get,post,put,delete 等各种请求方式,最常用的就是 get 和 post。URLConnection 提供了一组方法来建立与 URL 之间的连接、发送请求和接收响应。原创 2024-10-17 15:57:38 · 1566 阅读 · 0 评论 -
Java消息摘要:MD5 验证数据完整性、密码的加密
MD5(Message-Digest Algorithm 5)是一种被广泛使用的密码散列函数,是一种不可逆的加密算法,该算法可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1991年公布,用以取代 MD4 算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解。原创 2024-10-12 17:46:26 · 679 阅读 · 0 评论 -
Java编码方式:Base64 编码与解码
Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。它主要用于在不支持二进制数据的场合(如电子邮件、URL、文件系统名等)传输二进制数据。严格来说Base64 并不是一种加密/解密算法,而是一种编码方式。Base64 不生成密钥,通过Base64 编码后的密文就可以直接“翻译”为明文。原创 2024-10-05 17:19:19 · 2434 阅读 · 0 评论 -
Java使用BeanUtils.copyProperties实现对象的拷贝
BeanUtils.copyProperties 方法是 Java 中 Spring 框架提供的一个非常实用的工具方法,它用于将一个 JavaBean 对象的属性值拷贝到另一个 JavaBean 对象中。这个方法主要用于简化对象之间的数据转换过程,尤其是在处理具有大量相同属性的对象时,可以大大减少代码量,提高开发效率。原创 2024-09-30 17:27:48 · 1347 阅读 · 0 评论 -
JVM内存溢出和内存泄漏的区别
程序运行结束后,没有释放 所占用的内存空间。一次内存泄漏 似乎不会有大的影响,但内存泄漏 不断累积,最终可用内存会变得越来越少。比如说,总内存大小是100 MB,有40MB的内存一直无法回收,那么可用的只有60MB 。这40MB的就是内存泄漏。内存泄漏,就是程序运行结束后,没有释放的内存。程序运行时,在申请内存空间时,没有足够的内存空间供其正常使用,程序运行停止,并抛出 out of memory 。比如程序运行时申请了一个10MB 空间, 但是当前可用内存只有5MB,程序无法正常执行,这就是内存溢出。转载 2022-07-06 14:33:13 · 4823 阅读 · 0 评论 -
什么是OOM,为什么会OOM及一些解决方法
OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当JVM因为没有足够的转载 2022-07-03 16:16:32 · 3144 阅读 · 1 评论 -
Java四种引用类型:强引用、弱引用、软引用和虚引用
Java 的垃圾回收器机制 GC,GC 算是 Java 的一大特点,我们都知道 C 语言是不能自动释放内存的需要程序员去操作的,而 Java 自带的垃圾回收机制是能够帮助程序员自动释放内存的。GC:是Java自带的垃圾回收器,它是运行在独立的,优先级比较低的线程中,时刻都在检测与释放无用的内存,那是如何判断它是否有用,主要用的较多的判断方式就是引用计数。Java 执行 GC 判断对象是否存活有两种方式其中一种是引用计数。在 JDK 1.2 以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对转载 2022-07-02 17:50:48 · 503 阅读 · 0 评论 -
Java实现List集合的排序:Comparable接口、Comparator接口、stream().sorted()方法的使用
Java 提供的 List 接口继承了 Collection 接口,因此包含 Collection 中的所有方法。List 是有序集合,允许有相同的元素。ArrayList 是List 接口的一个实现类,它实现了可变大小的数值,允许所有元素,包括 null,并可以根据索引位置对集合进行快速的随机访问。Java 中的 Comparable 接口是实现对象自然排序的核心机制,Comparable 是位于 java.lang 包中的泛型接口,用于定义对象的自然排序规则。原创 2022-03-25 17:23:13 · 10948 阅读 · 0 评论 -
Java实现TreeMap集合的排序:Key键的升序与降序、Value值的排序
Java 提供的 Map 接口常用的实现类有 HashMap 和 TreeMap。HashMap 类实现的 Map 集合对于添加和删除映射关系效率更高。HashMap 通过哈希码对其内部的映射关系进行快速查找;而 TreeMap 中的映射关系存在一定的顺序,如果希望 Map 集合中的对象也存在一定的顺序,应该使用 TreeMap 类实现 Map 集合。下面将通过实例来实现Map 接口中的 TreeMap 集合按照 Key 键的升序与降序,按照 Value 值的排序。(1)创建用户信息实体类/.原创 2022-03-20 17:25:47 · 25414 阅读 · 0 评论 -
Java使用System.currentTimeMillis()方法计算程序运行时间
Java 中提供的 System.currentTimeMillis() 方法用于获取当前的计算机时间,时间的表达格式为当前计算机时间和 GMT 时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。System.currentTimeMillis() 方法的返回类型为 long ,表示毫秒为单位的当前时间。在开发过程中,通常很多人都习惯使用 new Date() 来获取当前时间。new Date() 所做的事情其实就是调用了 System.currentTimeMillis()方法。如果原创 2022-03-10 18:02:37 · 17847 阅读 · 1 评论 -
Java程序的初始化顺序、static{}静态代码块和实例语句块的使用
在 Java 语言中,当实例对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象所在的构造函数创建对象。Java 程序的初始化一般遵循以下三个原则:静态对象(变量)、非静态对象(变量)。 父类优先于子类进行初始化。 按照成员变量定义顺序进行初始化。Java 程序的初始化工作可以在许多不同的代码块中来完成,例如:静态代码块、实例语句块、构造函数等。1、普通类的执行顺序普通类的执行顺序为:静态代码块 → 实例语句块 → 构造函数。【示例】普通类的原创 2022-03-05 16:35:08 · 2645 阅读 · 0 评论 -
Hutool是一个小而全的Java工具类库
1、Hutool简介Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使 Java 拥有函数式语言般的优雅,让 Java 语言也可以“甜甜的”。Hutool 中的工具方法来自每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型项目中的效率担当;文档官方网站中文文档API文档包含组件一个 Java 基础工具类,对文件、流、加密解密、转码、正则、线程、XML等原创 2021-02-23 16:03:18 · 9777 阅读 · 1 评论 -
Java使用RabbitMQ发送和接收消息
RabbitMQ 是采用 Erlang 语言实现 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统,用于在分布式系统中存储转发消息。RabbitMQ 凭借其高可靠、易扩展、高可用及丰富的功能特性收到越来越多企业的青睐。下面介绍Java中如何使用RabbitMQ生产和消费消息。使用Maven添加依赖文件在pom.xml配置信息文件中,添加 RabbitMQ 客户端依赖:<!-- RabbitMQ客户端 --&原创 2020-12-31 16:30:44 · 6244 阅读 · 1 评论