给定以下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
没有对程序进行指定更改的情况下,它不会在构造函数中显示消息?