90得票5回答
什么是AssertionError?在哪些情况下应该在自己的代码中抛出它?

在《Effective Java 第二版》的第 2 条中,有这段代码片段,其中作者想禁止对象的空初始化。class Example { private Example() { throw new AssertionError(); } } 这里让我困惑的是抛出异...

42得票8回答
为什么公共静态不可变数组是安全漏洞?

《Effective Java》中提到: // 潜在的安全漏洞! static public final Thing[] VALUES = { ... }; 有人能告诉我这个安全漏洞是什么吗?

40得票6回答
为什么readObject和writeObject是私有的,我为什么要显式地写transient变量?

我正在阅读《Effective Java》中有关序列化的章节。 谁调用了readObject()和writeObject()方法?为什么这些方法被声明为private? 以下是书中的一段代码:// StringList with a reasonable custom serialized ...

35得票3回答
"递归类型限定"在泛型中是什么意思?

我正在阅读《Effective Java[第27项]》中的有关泛型的章节。 书中有这样一段话: 允许某个类型参数被某个表达式所限制,而该表达式涉及到该类型参数本身,这种情况虽然相对较少,但也是可以的。这就是所谓的递归类型限定(recursive type bound)。 还有这句话:...

35得票2回答
理解服务提供者框架的概念,比如使用工厂方法的JDBC

来自《Effective Java》(第1条: 考虑使用静态工厂方法代替构造函数): 由静态工厂方法返回的对象所属的类甚至不必在包含该方法的类编写时存在。这种灵活的静态工厂方法构成了服务提供者框架的基础,例如Java Database Connectivity API(JDBC)。服务...

25得票8回答
原始类型、无限制通配符和在泛型中使用 Object 有什么区别?

我正在阅读《Effective Java》中关于泛型的章节。 请帮我理解Set、Set<?>和Set<Object>之间的区别? 以下段落摘自该书: Set<Object>是一个参数化类型,表示可以包含任何类型对象的集合;Set<?>...

25得票6回答
Effective Java:Joshua Bloch著,第1项 - 静态工厂方法

我正在阅读 Joshua Bloch 的 Effective Java,有关第一条 Static Factory Method 的问题。 引用[Bloch, p.7] 接口不能有静态方法, 因此按照惯例,接口的 静态工厂方法被放在一个无法实例化的类中, 这个类被命名为 T...

23得票4回答
Java:在序列化过程中何时添加readObjectNoData()?

我正在阅读 Effective Java 中的序列化章节。我试图理解下面这段话,它出现在书中。 如果您实现了一个具有实例字段的可序列化且可扩展的类,则应该注意一些事项。如果该类具有不变式(invariant),并且如果其实例字段被初始化为它们的默认值(整型为零,布尔类型为false,对象引用...

19得票3回答
JVM如何重复使用interned字符串的子串?

我知道如果你这样做for (condition) { String s = "hi there"; } 在所有的迭代中只创建了一个String实例,不像String s = new String("hi there");那样在每次迭代中都会创建一个新实例。 但是,阅读Joshua B...

18得票4回答
非内存资源是什么?

我正在阅读《Effective Java》。 在讨论finalize时,他说: C++析构函数也用于回收其他非内存资源。在Java中,try-finally块通常用于此目的。 什么是非内存资源? 数据库连接是一种非内存资源吗?持有数据库连接的对象不也占用一些内存吗?