java教程技术文章
-
JVM内存结构分为方法区、堆、虚拟机栈、本地方法栈、程序计数器五部分;堆与方法区线程共享,其余线程私有;堆是GC主区域,分新生代(Eden+S0/S1)和老年代;方法区JDK8+由元空间替代永久代;虚拟机栈以栈帧存储局部变量等;程序计数器记录字节码行号且不会OOM。326 收藏 -
new是Java创建对象最直接可控的方式,触发完整生命周期:分配内存→初始化字段→执行构造方法→返回引用;需注意语法规范、异常处理及构造方法逻辑完整性。229 收藏 -
Stream.peek可调试数据流,它作为中间操作在不改变流的前提下打印日志,帮助定位过滤、映射等环节问题,需注意避免副作用并结合日志框架使用。335 收藏 -
Runtime.getRuntime().exec()执行shutdown命令需显式调用cmd/c并传入参数数组,如{"cmd","/c","shutdown","-s","-t","60"},避免字符串拼接;取消用{"cmd","/c","shutdown","-a"};注意权限、stderr日志、ProcessBuilder替代及-t参数校验。261 收藏 -
CPS是一种将后续逻辑显式作为参数传递的编程模式,核心是用Continuation替代隐式返回控制流;它不改变Java语法,但支撑Kotlin协程、CompletableFuture链式调用等异步机制,提升控制流可管理性与调度灵活性。415 收藏 -
Java中==比较值或地址,equals()默认比较地址但可重写为内容比较;基本类型只能用==,引用类型==比地址、equals()需重写才按内容比较。360 收藏 -
单等号(=)是赋值运算符,用于将右侧值存入左侧变量;双等号(==)是关系运算符,用于比较相等性并返回布尔值,二者作用、使用场景及行为(如==存在隐式类型转换)截然不同。378 收藏 -
应用Java插件并设置项目基本信息,配置仓库与依赖管理,自定义构建任务,优化性能参数。示例包括启用java插件、定义group和version、指定Java版本、添加mavenCentral仓库、声明implementation依赖、创建printBuildInfo任务、在gradle.properties中启用守护进程与并行构建,提升构建效率。384 收藏 -
必须用Integer而非int的场景是需将数字作为对象使用时:存入ArrayList等集合、作Map键、参与泛型、允许为null;因int非对象,无法调方法、判null或JVM引用传递。301 收藏 -
throw用于方法体内实际抛出异常对象并中断执行,throws用于方法声明末尾声明可能抛出的异常类型以告知调用者;前者后接异常实例,后者后接异常类名,可多个逗号分隔。225 收藏 -
char是基本类型,占2字节,单引号存单个Unicode字符;String是不可变引用类型,双引号存任意长度字符串,比较需用equals()而非==。311 收藏 -
Serial和SerialOld是JVM中单线程STW垃圾收集器,新生代用复制算法(Eden/Survivor切换),老年代用标记-整理算法;虽低开销适合小堆,但每次GC必停顿,不适用于多核大堆场景。411 收藏 -
本文详解JavaCleaner无法触发清理动作的典型原因:闭包中意外持有被清理对象的强引用,导致对象无法进入幻象可达状态;并提供符合JVM清理机制的规范实现方案。159 收藏 -
MapStruct编译不生成实现类的根本原因是未配置annotationprocessor;Maven需同时引入mapstruct和mapstruct-processor(scope=provided),IDEA要启用AnnotationProcessors,Gradle需添加annotationProcessor依赖。250 收藏 -
Java提供了内置的java.text.Normalizer类,支持按Unicode标准(如NFD、NFC、NFKD、NFKC)对字符串进行规范化处理,从而实现语义等价的字符串比较,有效解决重音符号、组合字符、全角/半角、兼容性字符等导致的匹配异常问题。335 收藏