4

给定以下Java中的简单代码。

final class Demo
{
    public static final long serialVersionUID=1L;

    static
    {
        System.out.println("Static constructor invoked.");
    }
}

public final class Main
{
    public static void main(String... args)
    {
        System.out.println(Demo.serialVersionUID);
    }
}

在这个最简单的 Java 代码中,static构造函数应该被调用,当类Demo被通过main()方法初始化Demo.serialVersionUID但它没有被初始化时。

如果这个程序在没有修改的情况下运行,输出将只是1(消息 -调用静态构造函数。块中指定的static将不会显示)。


如果我们希望按照初始化程序中指定的方式打印消息,static那么我们需要修改Demo类中的声明语句,

public static final long serialVersionUID=1L;

要么,

public static long serialVersionUID=1L;

删除final修饰符,或者,

public static final Long serialVersionUID=1L;

将原始类型long更改为其相应的包装类型Long

那么,为什么它会这样呢?为什么在static没有对程序进行指定更改的情况下,它不会在构造函数中显示消息?

4

0 回答 0