Java 程序的输出是如何产生的?

Java 程序的输出是如何产生的?,java,Java,以下程序的输出为: 代码如下: class StaticSuper{ static { System.out.println("superstatic block"); } StaticSuper(){ System.out.println("super constructor"); } } public class StaticClassExample extends StaticSuper{ st

以下程序的输出为:

代码如下:

 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
}

在课堂上

您看到的
静态
块就是我们所说的静态初始值设定项,它的工作通常是初始化类中的某些内容(可能是类范围的状态或某种资源)


当运行时加载类时调用它,这就是为什么它可以在运行
main
之前运行。

1:当使用new=>创建实例时,它调用构造函数

2:当调用构造函数时,会调用父构造函数

3:而且每当加载类时,即使对于构造函数,也会首先执行静态块

这样你就得到了你得到的订单

因为您正在执行类,所以首先检查所有静态块的完整文件,甚至在调用main方法之前就执行静态块

请给我解释一下表中静态{//某些行}的含义 班级

这叫一个。它是在类被加载(确切地说是初始化)时执行的。静态块将在
main()
方法之前执行


为什么“inmain”虽然在main()中是第一个,却排在第三位

由于静态块是在
main()
之前执行的,因此它会出现在打印列表的第三个位置,当您创建
StaticClassExample
类的实例时,首先调用它的
父构造函数,然后调用它自己的构造函数


因此,在加载类时调用输出。

静态块。这就是为什么先打印静态文件的打印输出。 静态变量意味着该类的不同实例不会有该变量的单独副本。
静态代码块仅用于在类加载时执行某些操作

是作业吗?你的想法是什么?我建议你学习java初始化顺序,也看看静态块。另外,我建议你学习搜索的魔力
static {
 // some lines
}