java教程技术文章
-
堆内存存储对象本体,栈内存存储基本类型和引用变量;堆中对象被多线程共享,栈中变量线程私有;栈溢出因递归过深或局部变量过多,堆溢出因对象过多或过大且GC无法及时回收。150 收藏 -
Java中方法调用基于运行时对象实际类型,遵循继承链向上查找,子类重写方法会动态绑定执行,静态方法则按引用类型绑定;多层继承下从实际类型逐级回溯,建议避免深层继承、优先使用组合,并谨慎处理构造器中可重写方法的调用。329 收藏 -
throws用于方法签名中声明可能抛出但不处理的受检异常,如IOException、SQLException;必须在调用可能抛出受检异常且未用try-catch处理时使用,可声明多个异常并用逗号分隔,子类重写时不能扩大异常范围。243 收藏 -
AtomicLongFieldUpdater是用于对volatilelong实例字段进行无锁原子更新的工具类,基于反射+Unsafe实现CAS,要求字段为volatile、long类型、非static非final,且updater需在字段可见范围内声明。300 收藏 -
JavaFXSpinner默认在长按上下箭头时会连续快速增减,本文介绍如何通过设置setRepeatDelay(Duration.INDEFINITE)禁用自动重复触发,使长按行为与单击一致——每次按下仅变更一个步长值。279 收藏 -
Java黑名单机制核心是“拦截+校验+持久化”,应置于请求进入业务逻辑前(如Web层Interceptor、RPC层Filter、服务内敏感操作前),避免DAO层硬编码;存储依规模与实时性选型。102 收藏 -
getClass().getName()返回带包名的全限定类名,如java.lang.String;需判空调用,优先用instanceof判断类型,字符串匹配应使用getSimpleName()。166 收藏 -
LockSupport.unpark能精准唤醒指定线程,关键在于其基于permit机制:unpark发放许可,park消费许可,许可可预存不丢失;而notify/notifyAll依赖同步块和等待队列,易信号丢失且无法指定目标。430 收藏 -
Java异常类必须实现Serializable,因为Throwable实现了该接口,确保异常可跨JVM传输;未显式声明serialVersionUID会导致结构变更时反序列化失败;含非transient不可序列化字段会抛NotSerializableException。247 收藏 -
Runtime.gc()不会强制触发垃圾回收,仅是向JVM发出建议,实际执行与否由JVM决定;生产环境中调用基本无效,还可能干扰GC策略。484 收藏 -
Java要求局部变量在使用前必须明确初始化;若仅用独立if语句而无else覆盖所有可能取值,编译器无法保证变量一定被赋值,从而报错。正确做法是用if-elseif-else结构或直接初始化默认值。266 收藏 -
StructuredTaskScope是防止孤儿线程的唯一有效边界,它通过作用域契约绑定子任务生命周期,要求必须用try-with-resources配合ShutdownOnFailure/ShutdownOnSuccess,并确保子任务响应中断。270 收藏 -
Arrays.setAll()是Java8提供的函数式数组填充方法,通过IntUnaryOperator或IntFunction按索引动态生成元素,要求数组预先创建且非null,不支持依赖前项的递推逻辑。320 收藏 -
字符串常量池是堆中固定大小的StringTable哈希表(JDK1.8+默认容量60013),存储堆中字符串对象的引用;双引号创建时通过哈希定位、equals比对实现复用,newString()强制新建堆对象且不自动复用,运行时拼接字符串需显式调用intern()才可能入池。151 收藏 -
File.mkdirs()能递归创建多级目录,自动补全所有不存在的中间目录;它线程安全、跨平台处理路径分隔符,但仅通过返回值判断成败,不抛异常。210 收藏