最近我在线检查代码并找到以下代码的输出:
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
任何人都可以帮助我了解此代码的功能。
答案 0 :(得分:5)
任何人都可以帮助我了解此代码的功能。
不确定。首先发生的是按照section 12.4.2 of the JLS初始化类。这涉及按照section 8.7运行类的静态初始值设定项。这里我们有一个静态初始化程序,可以打印x
。
main
方法然后创建Sequence
的实例。这遵循JLS的section 12.5。首先调用超类构造函数(此处为Object
),然后调用实例初始值设定项(section 8.6),然后调用构造函数体。这里有一个打印y
的实例初始值设定项,以及一个打印c
的构造函数体。
最后,执行go
方法打印g
。
答案 1 :(得分:1)
这是一个考试测验问题,以确保您可以弄清楚各种构造函数和初始化块的执行顺序。
你可以通过拥有超类来使这更复杂。
或者拥有多个初始化程序块。
答案 2 :(得分:0)
static block
,instance block
constructor
,最后是明确调用的所有方法
答案 3 :(得分:0)
这看起来很可疑是一个考试问题。要理解答案,您可以将代码的各个部分分解为:
构造函数(打印出“c”)
Sequence() {
System.out.print("c ");
}
实例初始化程序(打印出“y”)
{
System.out.print("y ");
}
main方法(创建一个Sequence实例并调用此实例)
public static void main(String[] args) {
new Sequence().go();
}
go方法(打印出“g”)
void go() {
System.out.print("g ");
}
静态初始化程序(打印出“x”)
static {
System.out.print("x ");
}
在Java中,执行的顺序是:(3)main方法,(5)静态初始化器,(2)实例初始化器,(1)构造函数,go方法(4)。
要了解有关初始化的详情,请参阅教程:http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html