Java中静态关键字的首选项
最近我在线检查一个代码,发现以下代码的输出:Java中静态关键字的首选项,java,Java,最近我在线检查一个代码,发现以下代码的输出: public class Sequence { Sequence() { System.out.print("c "); } { System.out.print("y "); } public static void main(String[] args) { new Sequence().go(); } void go()
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 ");
}
}
作为:
任何人都可以帮助我了解这段代码的功能。这是一个考试问答题,以确保您能够确定各种构造函数和init块的执行顺序 静态初始化器 实例初始值设定项 建设者 通过使用超类,您可以使这变得更加复杂 或者通过拥有多个初始化程序块。静态块、实例块构造函数,最后是显式调用的任何方法 有人能帮我了解一下这个代码的功能吗 当然。发生的第一件事是按照初始化类。这涉及运行类的静态初始值设定项,如所示。这里我们有一个静态初始化器,它打印x 然后,main方法创建一个Sequence实例。以下是JLS的一部分。首先调用这里的超类构造函数对象,然后调用实例初始值设定项,然后调用构造函数体。这里有一个实例初始值设定项,它输出y,还有一个构造函数体,它输出c
最后,执行go方法,打印g.这看起来可疑地像一道考试题。要理解答案,您可以将代码的各个部分分解为: 输出c的构造函数
Sequence() {
System.out.print("c ");
}
实例初始值设定项,它打印出y
{
System.out.print("y ");
}
main方法,该方法创建序列的实例并在此实例上调用
public static void main(String[] args) {
new Sequence().go();
}
输出g的go方法
void go() {
System.out.print("g ");
}
打印出x的静态初始值设定项
static {
System.out.print("x ");
}
在Java中,执行顺序是:3个主方法、5个静态初始值设定项、2个实例初始值设定项、1个构造函数、go方法4
要了解有关初始化的更多信息,请阅读教程:下次请正确缩进代码。然后你会得到更多的答案,更少的反对票。调试它,你会知道,比任何解释都好。感谢Uwe和Maroun确实静态块没有被移动到构造函数中,但初始化块会。感谢Soren,如果调试不可用,它是检查流的最佳方法
static {
System.out.print("x ");
}