首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Effective-Java
只因后端
创建于2023-04-25
订阅专栏
Effective-Java学习
等 4 人订阅
共89篇文章
创建于2023-04-25
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
88. 保护性的编写 readObject 方法
88. 保护性的编写 readObject 方法 第 50 条介绍了一个不可变的日期范围类,它包含可变的私有变量 Date。该类通过在其构造器和访问方法(accessor)中保护性的拷贝 Date
64. 通过接口引用对象
64. 通过接口引用对象 条目 51 指出,应该使用接口而不是类作为参数类型。更一般地说,你应该优先使用接口而不是类来引用对象。如果存在合适的接口类型,那么应该使用接口类型声明参数、返回值、变量和
72. 优先使用标准的异常
72. 优先使用标准的异常 专家级程序员与缺乏经验的程序员一个最主要的区别在于,专家追求并且通常也能够实现高度的代码重用。代码重用是值得提倡的,这是一条通用的规则,异常也不例外。Java 平台类库
14. 考虑实现Comparable接口
14. 考虑实现 Comparable 接口 与本章讨论的其他方法不同,compareTo 方法并没有在 Object 类中声明。 相反,它是 Comparable 接口中的唯一方法。 它与 Ob
83. 明智审慎的使用延迟初始化
83. 明智审慎的使用延迟初始化 延迟初始化是延迟字段的初始化,直到需要它的值。如果不需要该值,则不会初始化字段。这种技术既适用于静态字段,也适用于实例字段。虽然延迟初始化主要是一种优化,但是它也
50. 必要时进行防御性拷贝
50. 必要时进行防御性拷贝 愉快使用 Java 的原因,它是一种安全的语言(safe language)。 这意味着在缺少本地方法(native methods)的情况下,它不受缓冲区溢出,数组
76. 保持失败原子性
76. 保持失败原子性 当对象抛出异常之后,通常我们期望这个对象仍然保持在一种定义良好的可用状态之中, 即使失败是发生在执行某个操作的过程中间。对于受检异常而言,这尤为重要,因为调用者期望能从这种
77. 不要忽略异常
77. 不要忽略异常 尽管这条建议看上去是显而易见的,但是它却常常被违反,因而值得再次提出来。当 API 的设计者声明一个方法将抛出某个异常的时候,他们等于正在试图说明某些事情。所以,请不要忽略它
22. 接口仅用来定义类型
22. 接口仅用来定义类型 当类实现接口时,该接口作为一种类型(type),可以用来引用类的实例。因此,一个类实现了一个接口,因此表明客户端可以如何处理类的实例。为其他目的定义接口是不合适的。
44. 优先使用标准的函数式接口
44. 优先使用标准的函数式接口 现在 Java 已经有 lambda 表达式,编写 API 的最佳实践已经发生了很大的变化。 例如,模板方法模式[Gamma95],其中一个子类重写原始方法以专门
17. 最小化可变性
17. 最小化可变性 不可变类简单来说是其实例不能被修改的类。 包含在每个实例中的所有信息在对象的生命周期中是固定的,因此不会观察到任何变化。 Java 平台类库包含许多不可变的类,包括 Stri
62. 当使用其他类型更合适时应避免使用字符串
62. 当使用其他类型更合适时应避免使用字符串 字符串被设计用来表示文本,它们在这方面做得很好。因为字符串是如此常见,并且受到 Java 的良好支持,所以很自然地会将字符串用于其他目的,而不是它们
89. 对于实例控制,枚举类型优于 readResolve
89. 对于实例控制,枚举类型优于 readResolve 第 3 条讲述了 Singletion(单例)模式,并且给出了以下这个 Singletion 示例。这个类限制了对其构造器的访问,以确保
58. for-each 循环优于传统 for 循环
58. for-each 循环优于传统 for 循环 正如在条目 45 中所讨论的,一些任务最好使用 Stream 来完成,一些任务最好使用迭代。下面是一个传统的 for 循环来遍历一个集合: 下
29. 优先考虑泛型
29. 优先考虑泛型 参数化声明并使用 JDK 提供的泛型类型和方法通常不会太困难。 但编写自己的泛型类型有点困难,但值得努力学习。 考虑条目 7 中的简单堆栈实现: 这个类应该已经被参数
28. 列表优于数组
28. 列表优于数组 数组在两个重要方面与泛型不同。 首先,数组是协变的(covariant)。 这个吓人的单词意味着如果 Sub 是 Super 的子类型,则数组类型 Sub[] 是数组类型 S
32. 合理地结合泛型和可变参数
32. 合理地结合泛型和可变参数 在 Java 5 中,可变参数方法(详见第 53 条)和泛型都被添加到平台中,所以你可能希望它们能够正常交互; 可悲的是,他们并没有。 可变参数的目的是允许客户端
74. 每个方法抛出的异常都需要创建文档
74. 每个方法抛出的异常都需要创建文档 描述一个方法所抛出的异常,是正确使用这个方法时所需文档的重要组成部分。因此,花点时间仔细地为每个方法抛出的异常建立文档是特别重要的。 始终要单独地声明
20. 接口优于抽象类
20. 接口优于抽象类 Java 有两种机制来定义允许多个实现的类型:接口和抽象类。 由于在 Java 8 [JLS 9.4.3] 中引入了接口的默认方法(default methods ),因此
67. 明智审慎地进行优化
67. 明智审慎地进行优化 有三条关于优化的格言是每个人都应该知道的: 所有这些格言都比 Java 编程语言早了 20 年。它们告诉我们关于优化的一个深刻的事实:很容易弊大于利,尤其是如果过早
下一页