java教程技术文章
-
能,但仅限子类内部;外部调用永远走多态,super只是编译器为子类提供的静态绑定后门,不参与虚方法表查找,且不可在静态上下文或外部类中使用。298 收藏 -
Gradle卡在“StartingDaemon”本质是本地守护进程启动失败,主因包括JVM参数冲突、gradle.properties错误配置、IDE占用锁文件或临时目录权限异常;应先执行gradle--stop并清理daemon目录锁文件,再通过--no-daemon验证,最后调整gradle.properties中的org.gradle.jvmargs参数。486 收藏 -
Enum.valueOf严格匹配枚举常量名(区分大小写、不可含空格),需封装安全转换逻辑,如忽略大小写、trim空格、提供默认值或使用枚举内建fromString方法。414 收藏 -
本文介绍如何利用Java泛型与接口设计重构高度相似的过滤器构建方法,避免因继承导致的代码冗余和脆弱基类问题,同时提升可维护性与类型安全性。400 收藏 -
ThreadLocal的值存在当前线程的threadLocals字段(ThreadLocalMap类型)中,而非ThreadLocal实例本身;get/set操作本质是对此Map的key(当前ThreadLocal)查/存value;因Entry的key是弱引用而value是强引用,若不显式remove(),易导致value内存泄漏,尤其在线程池场景下。484 收藏 -
CyclicBarrier的核心作用是让一组线程互相等待至全部到达屏障点后共同继续执行,支持可重复使用和屏障动作回调,适用于多线程分阶段协作与同步汇报场景。357 收藏 -
LinkedList基于双向链表实现,支持高效插入删除和双向遍历,适用于栈、队列及浏览器历史等场景,但随机访问性能较差,需注意避免频繁get操作和线程安全问题。317 收藏 -
new是最直接的对象创建方式,需类非抽象/接口且构造器可访问;反射newInstance()已弃用,应改用getDeclaredConstructor().newInstance();静态工厂更灵活安全,推荐优先使用。483 收藏 -
LRU缓存不依赖访问频次,而是按最近使用时间淘汰;若需频次计数,实为LFU策略,可用keys[]、values[]、counts[]三个平行数组实现,查找、更新、淘汰均为O(N)时间复杂度。135 收藏 -
静态块不适合管理全局唯一加密盐值,因其导致所有用户共用同一固定盐值,违背盐值必须唯一且随机的密码学原则,使哈希退化为可预测的固定前缀,极易遭受彩虹表攻击。236 收藏 -
Java多态方法调用在运行时决定具体版本,根本原因是JVM通过invokevirtual指令结合对象头的klasspointer和类的虚方法表(vtable)动态查表定位方法入口。338 收藏 -
Java9的Optional.or()用于在当前Optional为空时惰性执行Supplier获取新Optional,返回值仍为Optional<T>;正确用法是opt.or(()->Optional.of("default")),而非传入实例或非Optional值。151 收藏 -
@TestFactory方法必须返回Stream/Collection/Iterable<DynamicTest>,数据需在方法体外层加载,每个DynamicTest需唯一可读名称并内嵌资源清理逻辑。283 收藏 -
InetAddress.getLocalHost()返回127.0.0.1是因主机名被解析为localhost,应遍历网卡获取真实局域网IP;getByName()失败多因DNS缓存、IPv6优先或防火墙;isReachable()在Windows下不可靠;getCanonicalHostName()强制正反向DNS解析确保FQDN。488 收藏 -
ReferenceQueue是监控对象实例被回收的通知通道,入队的是WeakReference或PhantomReference等引用对象本身,而非原始对象;需构造时显式传入,通过poll()/remove()轮询确认回收完成。179 收藏