- 博客(24)
- 收藏
- 关注
原创 第56条:为所有导出的API元素编写文档注释 《Effective Java》
导出API元素所有public或protected的类接口构造器方法字段声明案例说明/*** 表示一个不可变的复数。* 复数是一个由实部和虚部组成的数学概念。* <p>除非另有说明,所有方法都会对null参数抛出NullPointerException。* @author 作者名*//*** 创建一个复数实例。* @param real 实部* @param imag 虚部*//*** 返回此复数的实部。* @return 实部值*/
2026-02-06 11:19:45
626
原创 第55条:谨慎返回Optional 《Effective Java》
明确设计意图:Optional应该主要用作返回值,明确表示方法可能无法返回值不要滥用:不要用于字段、方法参数、集合元素等性能平衡:在大多数情况下,Optional带来的安全性收益大于微小性能损失替代null:相比返回null,Optional强制调用者处理缺失值的情况不要包装容器:集合、数组、Stream本身就能表示空的情况。
2026-02-03 17:19:26
454
原创 第54条:返回零长度的数组或者集合,而不是null 《Effective Java》
绝对原则:从返回数组或集合的方法中永远不要返回null正确做法:返回零长度的数组或空集合性能优化:使用不可变的空集合常量避免重复创建API设计:使调用代码更简洁、更安全、更易读。
2026-02-03 17:18:55
672
原创 第53条:慎用可变参数 《Effective Java》
✅参数的个数确实不固定零参数是有意义且合法的方法不会被频繁调用(非性能关键路径)主要用于客户端代码,而非内部核心逻辑❌参数个数有严格要求(如至少需要一个)方法在性能关键的循环中被调用参数类型为基本类型且数量通常很少可变参数是一个有用的特性,但需要谨慎使用。不要盲目使用:可变参数不是所有参数列表问题的银弹性能意识:认识到每次调用都有数组创建的开销API设计优先:方法的参数设计应该反映其语义需求防御性编程:对于需要特定数量参数的情况,使用编译时检查优于运行时检查渐进优化。
2026-02-03 17:17:48
545
原创 第52条:慎用重载 《Effective Java》
重载不是多态:重载基于编译时类型,重写基于运行时类型避免模糊性:相同参数数量的重载容易导致混淆考虑所有转换:自动装箱、泛型、可变参数都会影响重载选择// 定义有明确语义的函数式接口// 可以添加默认方法// 静态工厂方法// 语义清晰的重载System.out.println("验证通过: " + input);} else {System.out.println("验证失败: " + input);
2026-02-03 17:17:12
569
原创 谨慎设计方法签名 《Effective Java》第51条
方法名要清晰:遵循命名约定,准确描述方法功能参数列表要简短:不超过4个参数,使用Builder模式或辅助类组织参数参数类型优先使用接口:提高方法的通用性和灵活性谨慎使用函数对象:利用Java 8的函数式特性简化API避免混淆性重载:特别是参数类型相似时,考虑使用不同方法名返回空数组或集合而非null:简化客户端代码,避免NullPointerException考虑方法签名对API演进的影响:好的设计应该便于未来扩展而不破坏现有客户端设计出易于理解、使用正确、难以误用且易于维护的API。
2026-01-20 17:39:03
1076
原创 必要时进行保护性拷贝 《Effective Java》第八章 第50条
假设客户端会尝试破坏你的类不要依赖客户端的良好行为主动防御恶意或错误的使用保护性拷贝的完整策略构造函数:对每个可变参数进行保护性拷贝getter方法:返回可变字段的保护性拷贝setter方法:存储参数的副本,不是原始引用检查在拷贝之后进行避免TOCTOU攻击在私有副本上验证参数有效性。
2026-01-16 16:07:31
967
原创 检查参数的有效性 《Effective Java》第八章 第49条
《Effective Java》第八章第49条强调在方法执行前检查参数有效性的重要性。核心思想是通过防御性编程实现快速失败机制,确保错误尽早暴露。文章介绍了基本检查方式,包括简单参数验证和对象引用检查,推荐使用Objects.requireNonNull()等工具方法。特别强调了通过Javadoc明确记录参数约束和异常情况。对于非公有方法,可使用断言进行检查。构造器参数检查需在防御性拷贝后进行。文章还指出检查的例外情况,如检查成本过高或影响互操作性时。
2026-01-16 16:06:56
962
原创 要在公有类而非公有域中使用访问方法《Effective java第四章第十六条 》
对 Effective java第四章第十六条 要在公有类而非公有域中使用访问方法 进行学习
2025-08-07 15:14:40
972
原创 使类和成员的可访问性最小化 《Effective java第四章第十五条》
对于 《Effective java第四章第十五条》 使类和成员的可访问性最小化 的学习
2025-08-07 14:16:11
1012
原创 考虑实现 Comparable 接口 《Effective java第三章第十四条》
对 Effective java第三章第十四条 考虑实现 Comparable 接口 的学习(第13条 谨慎地覆盖 clone 之后再学习~)
2025-08-07 11:36:22
960
原创 始终要覆盖 toString 《Effective java》第三章第十二条
学习: Effective java第三章第十二条 始终要覆盖 toString
2025-08-06 12:01:54
1664
原创 覆盖equals时总要覆盖 hashCode Effective java第三章第十一条
学习 hashCode Effective java第三章第十一条 覆盖equals时总要覆盖 !!!错误2:使用可变字段!!!
2025-08-06 11:08:50
842
原创 覆盖equals时请遵守通用约定 《Effective Java》第三章第十条
关于 《Effective Java》第三章第十条:覆盖equals时请遵守通用约定 的学习
2025-08-05 19:13:38
804
原创 try-with-resources优先try-finally《Effective java第二章第九条》
对于 《Effective java第二章第九条》 try-with-resources优先try-finally 进行学习与总结
2025-08-05 16:09:48
717
原创 避免使用终结方法和清除方法(《Effective Java》第二章第八条)
对于 《Effective Java》第二章第八条:避免使用终结方法和清除方法 进行学习与总结
2025-08-05 14:54:39
743
原创 消除过期的对象引用(《Effective Java》第二章第七条)
对于 消除过期的对象引用(《Effective Java》第二章第七条) 进行学习与总结
2025-08-05 11:39:57
1060
原创 Effective Java(3版)第二章 第六条 避免创建不必要的对象
本文总结了Java中避免创建不必要对象的优化原则和实际案例。关键点包括:优先使用字符串字面量而非new String();对不可变类使用静态工厂方法;缓存昂贵的对象如正则表达式Pattern;理解适配器视图的对象重用机制;警惕自动装箱导致的隐蔽对象创建。同时指出对象池应谨慎使用,仅适用于重量级对象,而轻量级对象则无需过度优化。通过合理应用这些原则,可以显著提升Java程序性能,减少内存开销。
2025-08-05 10:27:44
779
原创 Effective Java(3版)第二章 第五条 优先考虑依赖注入来引用资源详解
文章摘要: 本文详细介绍了依赖注入设计模式及其实现方式。依赖注入的核心思想是将依赖对象的创建与使用分离,通过控制反转由外部提供依赖对象。文章对比了传统非DI方式与依赖注入的区别,并阐述了三种依赖注入实现方式:基本依赖注入、工厂方法注入(使用Java8的Supplier接口)以及Spring框架注入。特别分析了工厂方法注入的优势,包括延迟创建、复杂创建逻辑处理等。最后总结了依赖注入的最佳实践,强调避免内部创建依赖、合理选择注入方式等原则。全文通过代码示例展示了各种注入方式的具体实现,为设计松耦合、可测试的系统
2025-08-05 10:22:35
387
原创 Effective Java(3版)第二章 第四条 通过私有构造器强化不可能实例化的能力
摘要:本文阐述了如何设计不可实例化的工具类,如java.util.Arrays等只包含静态方法的类。核心方法是通过私有构造器并抛出AssertionError来防止实例化,这能明确设计意图、防止误用和资源浪费。文中列举了标准库示例,并强调了最小惊讶原则和防御性编程理念。实现要点包括私有构造器、错误抛出、final修饰和文档说明,确保工具类既不能被实例化也不能被继承。(150字)
2025-08-05 10:21:04
368
原创 Effective Java(3版)第二章 第三条 使用私有构造器或枚举类型强化Singleton
本文介绍了四种强化Singleton模式的实现方法:1)使用公共静态final字段;2)静态工厂方法;3)枚举类型;4)应对序列化问题。重点分析了transient字段在单例模式中的应用场景,如缓存和数据库连接等非持久化状态,解释了使用transient的必要性。同时详细说明了readResolve()方法防止序列化破坏单例的机制,通过返回现有实例确保单例唯一性。文章通过具体代码示例,展示了如何结合transient和readResolve()来维护单例对象的状态一致性。
2025-08-05 10:19:42
370
原创 Effective Java 构造器 学习1
本内容为博主对 Effective Java(3版) 这本书的学习与分享, 本文为第二章 第一、第二条 用静态工厂方法代替构造器遇到多个构造器参数时要考虑使用构建器
2025-08-05 10:16:41
887
原创 Linux安装MYSQL数据库时 进行Mairadb安全配置,出现的错误
我将目录转换位/root 用户下运行 mysql_secure_installation ,正常运行。第一次安装MYSQL数据库,进行Mairadb安全配置时,产生了如下错误。此情况只针对个人运行情况,如果有知道什么情况的,欢迎指导。
2023-03-11 11:35:58
164
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅