给出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
构造函数,但它< strong>不。
如果这个程序没有修改就运行了,输出只会是1
(调用的消息 - 静态构造函数。{/ 1}}块中指定的将不会显示)。
如果我们希望按照static
初始化程序中的指定打印消息,那么我们需要修改static
类中的声明语句,
Demo
到任何一个,
public static final long serialVersionUID=1L;
删除public static long serialVersionUID=1L;
修饰符或
final
将基元类型public static final Long serialVersionUID=1L;
更改为其对应的包装类型long
。
那么,为什么它会这样呢?如果没有对程序进行指定的更改,为什么它不会在Long
构造函数中显示消息?