以下程序的输出是:
superstatic block static blockn0 inmain super constructor constructor
以下是代码:
class StaticSuper{
static {
System.out.println("superstatic block");
}
StaticSuper(){
System.out.println("super constructor");
}
}
public class StaticClassExample extends StaticSuper{
static int rand;
static {
rand =(int) (Math.random() * 6);
System.out.println("static blockn" + rand);
}
StaticClassExample(){
System.out.println("constructor");
}
public static void main(String[] args) {
System.out.println("inmain");
StaticClassExample st= new StaticClassExample();
}
}
为什么“inmain”被打印在第三位,虽然它是main()
中的第一位?请解释一下我的意思:
static {
// some lines
}
在课堂上。
答案 0 :(得分:2)
您看到的static
块就是我们所说的静态初始化程序,它的作用通常是初始化类中的某些内容(可能是类范围的状态或某种类型的资源)。
运行时加载类时调用,这就是为什么它可以在main
运行之前运行。
答案 1 :(得分:0)
1:使用new ==>创建实例时它调用构造函数
2:就在调用构造函数时,调用父构造函数
3:并且每当加载一个类时,即使对于构造函数,也会首先执行静态块,
因此您获得了获得的订单
因为您正在执行您的类,所以首先检查完整文件是否存在任何静态块,并且甚至在调用main方法之前执行静态块
答案 2 :(得分:0)
请解释一下静态{// some lines}的含义 类。
它被称为static initializer。它在类加载(或初始化,确切地说)时执行。静态块将在main()
方法之前执行。
为什么“inmain”会在main()中首先打印第三个?
由于静态块在main()
之前执行,因此它在打印列表中显示为第三个,当您创建StaticClassExample
类的实例时,首先调用其parent
构造函数,然后调用它自己的构造函数被调用。
因此,输出。
答案 3 :(得分:0)
在加载类时调用静态块。这就是为什么首先打印静态打印输出。 静态变量意味着该类的不同实例不会有该变量的单独副本。 如果您想在类加载时执行某些操作,那么静态代码块就很简单了。