
Java基础
文章平均质量分 82
Java基础分类专栏是专门为Java初学者及希望巩固基础的开发者设计的知识平台,旨在系统地介绍Java语言的核心概念、语法特性、编程思维以及基础实用技能。此专栏内容广泛,从Java语言基础到面向对象编程,再到常用类库的使用,为读者构建起坚实的Java编程基础
JavaDog程序狗
一个低端小气没档次的渣男程序狗
展开
-
【Java】小老弟,别再被Java深拷贝浅拷贝绕晕啦
本文以代码和图解形式剖析 Java 对象深拷贝与浅拷贝。浅拷贝复制基本类型属性值,引用类型仅复制引用,新原对象引用属性指向同一地址;深拷贝对引用类型也递归创建新对象,指向不同地址。原创 2025-05-18 12:10:52 · 1001 阅读 · 0 评论 -
【Java】5分钟搞懂CompletableFuture与线程池的配置与使用
CompletableFuture结合线程池是Java异步编程的核心工具。通过supplyAsync发起任务,thenApply/thenAccept链式处理结果,exceptionally捕获异常,实现高效异步编排。线程池(如Fixed、Cached、自定义ThreadPoolExecutor)需合理配置核心线程数、最大线程数、任务队列及拒绝策略,避免资源浪费或任务阻塞。原创 2025-05-18 10:01:35 · 597 阅读 · 0 评论 -
【Java】女朋友都抱怨了,别再粗暴停止线程池啦!
本文围绕Java线程池优雅停止展开。先形象解释线程池概念,强调优雅停止可避免数据丢失、保障系统稳定。介绍shutdown()等核心方法及特点,给出电商、数据分析等业务场景应用示例和代码示例。原创 2025-05-16 09:55:37 · 908 阅读 · 0 评论 -
【Spring】AOP通知加载顺序比前任更难搞?来看异常时执行逻辑全解析
本文解析Spring AOP通知执行流程,涵盖五种通知类型(前置、后置、返回、异常、环绕)及其正常与异常场景下的执行顺序。正常顺序为:环绕开始→前置→目标方法→环绕结束→返回→后置;异常时,流程变为:环绕开始→前置→目标方法→异常通知→后置,且环绕结束部分仅在proceed()后抛出异常时执行。后置通知始终执行,环绕通知的后半部分受异常抛出时机影响。附代码示例验证流程及异常处理逻辑。原创 2025-05-16 09:54:47 · 828 阅读 · 0 评论 -
【Java】ThreadLocal大揭秘:从原理到实战,轻松掌握线程安全
本文介绍了Java中ThreadLocal的作用与核心特性,强调其通过为每个线程提供独立数据副本实现线程安全,避免共享变量冲突。核心特性包括线程隔离、自动回收和延迟初始化。与同步方法、锁机制相比,ThreadLocal性能更高且代码更简洁,适用于需线程独占数据的场景,如Web应用中存储用户信息。但需注意线程池中需手动调用remove()防止内存泄漏,以及通过InheritableThreadLocal解决父子线程间的数据传递问题。原创 2025-05-14 15:10:37 · 1035 阅读 · 0 评论 -
【Java】BigDecimal引发事故大揭秘,这“雷区”你踩过没?
本文揭秘BigDecimal三大致命陷阱:用double构造导致精度丢失(如0.1变0.100000…),必须用字符串构造;除法不设精度会抛异常,需指定舍入模式;equals()同时比较值和精度,2.00≠2.0,需用compareTo()。牢记字符串构造、设精度、银行家舍入三原则,避免财务事故。原创 2025-03-14 09:13:53 · 957 阅读 · 0 评论 -
【Java】throw异常后代码还执行吗?80%小伙伴竟然不知道
在Java中,throw语句用于抛出异常。一旦执行throw,当前方法或代码块的后续代码将不再执行。如果抛出的异常被try-catch结构捕获,catch块内的代码将被执行,而throw后的代码不会执行。如果没有匹配的try-catch结构来处理这个异常,throw之后的代码也不会执行,并且异常会继续向上抛出,直到被处理或导致程序终止。简而言之,throw之后的代码通常不会执行,除非异常被成功捕获并处理后继续执行后续逻辑。原创 2024-08-15 15:08:03 · 1599 阅读 · 0 评论 -
【Java】服务CPU占用率100%,教你用jstack排查定位
本文介绍了使用jstack工具诊断Java应用中CPU高占用问题的方法。关键步骤包括:首先,通过top或jps -l命令定位高CPU占用的Java进程;其次,运用top -Hp 找出消耗CPU最多的线程;接着,将线程ID转换为十六进制,以便于jstack命令使用;最后,通过jstack | grep '' -C5命令获取特定线程的堆栈信息,进而分析和修复问题代码。jstack是Java开发者解决性能问题的有力工具。原创 2024-07-18 13:38:53 · 3768 阅读 · 0 评论 -
【Java】@Transactional事务套着ReentrantLock锁,锁竟然失效超卖了
本文聚焦于Java并发编程中常见的超卖问题,这是一种由于并发操作不当而导致的数据一致性错误。文章通过生动的案例——空调租赁充值时长的并发操作——引出了超卖现象及其影响。随后,介绍了四种解决超卖问题的策略:乐观锁、悲观锁、分布式锁和代码级锁(如ReentrantLock)。特别强调了在使用锁机制时,事务边界管理的重要性,指出锁的获取和释放应严格控制在事务范围内,以确保数据在高并发场景下的完整性和一致性。通过合理的事务边界设置和锁管理,可以有效避免超卖问题,提升系统的可靠性和性能。原创 2024-07-18 13:36:41 · 1066 阅读 · 1 评论 -
《设计模式》单例模式简单实例
单例模式我们是伟大的母亲孕育的,你是独一无二的,DNA也是唯一的;或者在一个公司中,只会有一个老总;再或者一个班级中只有一个班主任;原创 2021-03-15 18:35:51 · 253 阅读 · 1 评论 -
《Java数组》常用方法
1.声明一个数组2.打印一个数组3.根据数组创建ArrayList4.判断数组内部是否包含某个值5.连接两个数组6.ArrayList转数组7.Array转Set8.反转数组9.删除数组元素10.整形转字节数组原创 2021-03-17 17:23:42 · 147 阅读 · 1 评论 -
Java通过HttpClient从外部url下载文件到本地
java通过url下载文件到本地将外网文件通过url转化成本地文件httpclient下载到本地java根据url下载文件到本地解决图片防盗链问题原创 2021-06-07 17:55:05 · 11918 阅读 · 2 评论 -
【夏令时】用@JsonFormat(pattern = “yyyy-MM-dd“)注解,出生日期竟然年轻了一天
解决夏令时导致日期少一天的解决方案1. @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8" )2. 启动时JVM加入参数 -Duser.timezone=GMT+083. @JsonFormat(pattern = "yyyy-MM-dd", locale = "zh", timezone = "Asia/Shanghai")原创 2023-08-25 13:42:45 · 2253 阅读 · 0 评论