Tag: 有效 java

Java:何时在序列化期间添加readObjectNoData()?

我正在阅读“Effective Java”中的序列化章节。 我试图理解书中的下一段。 如果您实现的类具有可序列化和可扩展的实例字段,那么您应该注意这一点。 如果类的实例字段初始化为默认值(整数类型为零,布尔值为false,对象引用类型为null),则会违反不变量,必须将此readObjectNoData方法添加到类中: // readObjectNoData for stateful extendable serializable classes private void readObjectNoData() throws InvalidObjectException { throw new InvalidObjectException(“Stream data required”); } 我不确定上述陈述的含义。 为了测试这个,我创建了一个Person类(可序列化和可扩展) class Person implements Serializable{ private String name; private int age; Person() { this(“default”,1); } Person(String name, int y) { this.name = name; this.age = y; } } 以及扩展它的类Employee。 class […]

有效的Java项目47:了解并使用您的库 – 有缺陷的随机整数方法示例

在Josh给出的有缺陷的随机方法的例子中,该方法产生具有给定上界n的正随机数,我不明白他陈述的两个缺陷。 书中的方法是: private static final Random rnd = new Random(); //Common but deeply flawed static int random(int n) { return Math.abs(rnd.nextInt()) % n; } 他说,如果n是2的小幂,则生成的随机数序列将在短时间后重复出现。 为什么会这样? Random.nextInt()的文档说明Returns the next pseudorandom, uniformly distributed int value from this random number generator’s sequence. 所以不应该是,如果n是一个小整数,那么序列将重复,为什么这只适用于2的幂? 接下来他说如果n不是2的幂,一些数字平均会比其他数字更频繁地返回。 如果Random.nextInt()生成均匀分布的随机整数,为什么会发生这种情况呢? (他提供了一个代码片段,清楚地certificate了这一点,但我不明白为什么会出现这种情况,以及这与n是2的权力有什么关系)。