小编Gee*_*eek的帖子

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

我正在阅读"Effective Java"中的序列化章节.我试图理解书中的下一段.

如果您实现的类具有可序列化和可扩展的实例字段,那么您应该注意这一点.如果类的实例字段初始化为其默认值(整数类型为零,布尔值为false,对象引用类型为null),则会违反不变量,必须将此readObjectNoData方法添加到类中:

    // readObjectNoData for stateful extendable serializable classes
     private void readObjectNoData() throws InvalidObjectException {
             throw new InvalidObjectException("Stream data required");
     }
Run Code Online (Sandbox Code Playgroud)

我不确定上述陈述的含义.

为了测试这个,我创建了一个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;
      }
    }
Run Code Online (Sandbox Code Playgroud)

以及扩展它的类Employee.

     class Employee extends Person  {

      String address ;


    public Employee()
    {
        super();
        address ="default_address";
    }

    public Employee(String name , int age, String address)
    {
        super(name,age);
        this.address = address; …
Run Code Online (Sandbox Code Playgroud)

java serialization effective-java

23
推荐指数
1
解决办法
5617
查看次数

什么是自由变量?

Javascript闭包定义说:

"闭包"是一个表达式(通常是一个函数),它可以将自由变量与绑定这些变量的环境("关闭"表达式)结合在一起.

有人可以向我解释自由变量的概念吗?这个概念是Javascript特定还是适用于其他语言?

javascript closures free-variable

23
推荐指数
2
解决办法
1万
查看次数

这个按位AND运算符如何屏蔽该数字的低七位?

我正在阅读Brian Kernigan和Dennis Ritchie 的C编程语言.以下是关于按位AND运算符的说法:

按位AND运算符&通常用于屏蔽某些位,例如,

    n = n & 0177 
Run Code Online (Sandbox Code Playgroud)

将低7位的所有值设置为零n.

我不太清楚它是如何屏蔽低七位的n.请有人澄清一下吗?

c bit-manipulation bit bitwise-operators

23
推荐指数
3
解决办法
6543
查看次数

使用工厂方法了解JDBC之类的服务提供者框架背后的概念

Effective Java(第1项:考虑静态工厂方法而不是构造函数):

在编写包含该方法的类时,静态工厂方法返回的对象的类甚至不需要存在.这种灵活的静态工厂方法构成了服务提供者框架的基础,例如Java数据库连接API(JDBC).服务提供者框架是多个服务提供者实现服务的系统,并且系统使实现可用于其客户端,从而将它们与实现分离.

我特别不明白为什么这本书说的是静态工厂方法返回的对象的类在编写包含该方法的类时甚至不需要存在?有人可以解释使用JDBC作为示例.

java jdbc service-provider effective-java

22
推荐指数
2
解决办法
5313
查看次数

请解释Kernighan的位计数算法背后的逻辑

在以整数时间复杂度读取Bits计数算法(Brian Kernighan)之后,直接遵循此问题.有问题的Java代码是

int count_set_bits(int n) {
  int count = 0;
    while(n != 0) {
      n &= (n-1);
      count++;
    }
 }
Run Code Online (Sandbox Code Playgroud)

我想了解n &= (n-1)这里取得了什么成果?我在另一个漂亮的算法中看到了类似的构造,用于检测数字是否是2的幂,如:

if(n & (n-1) == 0) {
    System.out.println("The number is a power of 2");
}
Run Code Online (Sandbox Code Playgroud)

java algorithm bit-manipulation bit

19
推荐指数
1
解决办法
4785
查看次数

Effective Java:分析clone()方法

请考虑以下有效Java项目11(明智地覆盖克隆),其中Josh Bloch正在解释clone()合同的错误.

这份合同存在许多问题."没有被称为构造函数"的规定过于强烈.一个行为良好的克隆方法可以调用构造函数来创建正在构建的克隆内部的对象.如果类是final,clone甚至可以返回由构造函数创建的对象.

有人可以解释Josh Bloch在第一段中所说的"如果类是final,clone甚至可以返回由构造函数创建的对象".这里final有什么关系clone()

java clone cloneable

18
推荐指数
3
解决办法
7566
查看次数

基数排序:LSD与MSD版本

"算法简介"一书提到了基数排序的LSD(最低有效数字)版本.但是,正如其他人在stackoverflow中指出的那样,MSD(最高有效数字)版本也存在.所以我想知道每一个的利弊.我的猜测是LSD版本比MSD版本有一些好处,但我不确定.因此问题.

sorting algorithm radix-sort

18
推荐指数
3
解决办法
2万
查看次数

比较与equals一致意味着什么?如果我的班级不遵循这个原则,可能会发生什么?

从TreeMap的JavaDoc:

请注意,如果此有序映射要正确实现Map接口,则由有序映射维护的排序(无论是否提供显式比较器)必须与equals一致.(请参阅Comparable或Comparator以获得与equals一致的精确定义.)这是因为Map接口是根据equals操作定义的,但是map使用compareTo(或compare)方法执行所有键比较,因此有两个键从排序地图的角度来看,通过这种方法被视为相等的是相等的.即使排序与equals不一致,也可以很好地定义有序映射的行为.它只是不遵守Map接口的一般合同.

有人可以给出一个具体的例子来说明如果排序与equals不一致可能会出现的问题吗?举例来说,用户定义的类具有自然顺序,即它实现了Comparable.JDK中的所有内部类都保持这个不变量吗?

java comparison equals comparable comparator

17
推荐指数
4
解决办法
1万
查看次数

这三种代码覆盖率分析方法有什么区别?

该声纳页面基本上列出了不同代码覆盖率分析工具采用的各种方法:

  1. 源代码检测(由Clover使用)
  2. 离线字节代码检测(由Cobertura使用)
  3. 即时字节代码检测(由Jacoco使用)

这三种方法是什么,哪种方法效率最高?为什么?如果效率问题的答案是"它取决于",那么请解释原因?

java code-coverage cobertura clover jacoco

17
推荐指数
1
解决办法
5938
查看次数

什么是Java中的合成字段?

有人可以用一种易于理解的方式解释Java中合成字段的重要性.我记得在非静态内部类的上下文中读取它,其中每个这样的内部类实例都维护对封闭类的引用.为什么这样的引用/字段称为合成字段?

java compiler-construction field inner-classes synthetic

17
推荐指数
1
解决办法
2万
查看次数