java教程技术文章
-
泛型是编译期类型契约而非语法糖,应在逻辑相同但数据类型不同的场景定义泛型类,优先使用泛型方法;需合理约束T,避免过度约束与擦除陷阱,并正确运用协变/逆变。204 收藏 -
HashSet去重依赖HashMap的key唯一性,本质是通过hashCode()定位桶位置、equals()判断逻辑相等;自定义类必须重写二者以保证一致性,否则去重失效。422 收藏 -
Java接口的本质是纯粹的行为规范契约,只定义“做什么”而不涉及“怎么做”,通过无状态、多实现、按契约注入等机制实现彻底解耦。386 收藏 -
POJO是不继承父类、不实现框架接口、不依赖注解的纯Java对象;Entity耦合JPA生命周期管理,PO仅作SQL映射;推荐统一用UserDO命名数据库类,DTO用于服务间传输,VO用于前端展示,且均需实现Serializable。495 收藏 -
增强for循环编译后等价于传统for+数组访问,对原生数组性能无差异;但遍历集合时需创建Iterator对象,有额外开销;传统for支持索引操作,适用跳过元素、相邻访问等场景。193 收藏 -
@Version注解需配合乐观锁拦截器才生效,仅加注解无效;必须注册MybatisPlusInterceptor并添加OptimisticLockerInnerInterceptor,且字段类型为数值型、数据库列非空,默认值0。104 收藏 -
Android应用从APK切换为AAB发布后,内置的AMR格式音频文件因被自动压缩而无法加载,引发Resources$NotFoundException;通过配置aaptOptions.noCompress显式排除AMR文件可彻底解决。259 收藏 -
Java读取文件乱码的根本原因是程序字符编码与文件实际编码不一致,需明确文件真实编码并显式指定,禁用系统默认编码,处理BOM,统一项目UTF-8规范。476 收藏 -
本文介绍如何在SpringJPA中实现灵活、可扩展的动态条件分页查询,避免传统if-else组合爆炸问题,通过JPQL参数占位符或CriteriaAPI实现“仅对非空字段生效”的过滤逻辑。414 收藏 -
instanceof不会抛出NullPointerException,左操作数为null时安全返回false;它与强制类型转换的关键区别在于JVM层面的null保护,且右侧必须是编译期已知的引用类型。213 收藏 -
Java类单继承且不可继承final类;私有成员存在但不可见;@Override是编译期契约,防止重写失效;多态仅适用于非static、非final、非private的实例方法,调用由运行时类型决定。148 收藏 -
CopyOnWriteArrayList写操作不阻塞读,因每次修改都新建数组复制内容,读操作持老数组引用且无锁;但写开销大、迭代器不可见新元素、多方法组合非原子。454 收藏 -
数组用length字段,集合用size()方法,字符串用length()方法;三者语法语义不同,混用导致编译错误,嵌套结构需逐层判断类型。132 收藏 -
Lombok的@Builder注解会覆盖类中已初始化的集合字段(如privateList<Category>children=newArrayList<>();),导致调用addChild()时触发NullPointerException。根本原因在于Builder生成的构造逻辑未保留字段默认值。178 收藏 -
本文探讨在不直接测试私有方法的前提下,通过端到端断言公共方法输出来间接覆盖私有逻辑,确保关键业务字段(如extras)被正确计算并注入返回对象,从而防范因代码遗漏导致的静默缺陷。187 收藏