-1

最近在网上查了一段代码,发现输出如下代码:

public class Sequence { 

    Sequence() { 
        System.out.print("c "); 
    }

    { 
        System.out.print("y "); 
    } 

    public static void main(String[] args) { 
        new Sequence().go(); 
    }
    void go() { 
        System.out.print("g "); 
    }

    static{
        System.out.print("x "); 
    }

} 

作为:

x y c g

谁能帮我了解这段代码的功能。

4

4 回答 4

5

谁能帮我了解这段代码的功能。

当然。发生的第一件事是根据 JLS 的第 12.4.2 节初始化该类。这涉及按照第 8.7 节运行类的静态初始化程序。这里我们有一个静态初始化器,它打印x.

然后该main方法创建一个Sequence. 这遵循JLS 的第 12.5 节。首先调用超类构造函数(Object此处),然后调用实例初始化器(第 8.6 节),然后调用构造函数主体。在这里,您有一个打印的实例初始化程序y和一个打印的构造函数主体c

最后,go执行打印的方法g

于 2013-09-17T06:04:15.237 回答
1

这是一个考试测验问题,以确保您能够弄清楚各种构造函数和初始化块的执行顺序。

  1. 静态初始化器
  2. 实例初始化器
  3. 构造函数

您可以通过拥有超类来使其更加复杂。

或者通过拥有多个这些初始化程序块。

于 2013-09-17T06:01:41.710 回答
0

static blockinstance block constructor最后是显式调用的任何方法

于 2013-09-17T06:01:55.697 回答
0

这看起来像是一道考试题。要理解答案,您可以将代码的各个部分分解为:

  1. 构造函数(打印出“c”)

    Sequence() { 
        System.out.print("c "); 
    } 
    
  2. 实例初始化程序(打印出“y”)

    { 
        System.out.print("y "); 
    }
    
  3. main 方法(创建 Sequence 的一个实例并在此实例上进行调用)

    public static void main(String[] args) {
        new Sequence().go();
    }
    
  4. go 方法(打印出“g”)

    void go() {
        System.out.print("g ");
    }
    
  5. 静态初始化程序(打印出“x”)

    static {
        System.out.print("x ");
    }
    

在Java中执行顺序是:(3)main方法,(5)静态初始化器,(2)实例初始化器,(1)构造器,go方法(4)。

要了解有关初始化的更多信息,您可以阅读教程:http ://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

于 2013-09-17T06:20:32.787 回答