Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我需要帮助理解java程序员1练习考试答案(#1)_Java - Fatal编程技术网

我需要帮助理解java程序员1练习考试答案(#1)

我需要帮助理解java程序员1练习考试答案(#1),java,Java,我不完全明白为什么答案是这样。以下是示例问题中给出的代码: public class Sequence { Sequence() { System.out.print("c "); } { System.out.print("y "); } public static void main(String[] args) { new Sequence().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 "); 
    } 
} 
所以问题是输出/结果是什么。答案是:
xycg


有人能解释为什么会这样吗?

加载类时执行静态块,即不需要对象的实例。因此,在你的情况下:

static 
{ 
   System.out.print("x "); 
} 
将首先打印
x
。它总是在类加载时首先执行

任何不在构造函数中的块(称为
实例块
)都将在构造函数之前执行(在继承的情况下,在调用
super()
之后执行)但不在任何静态块之前执行,因此:

{ 
   System.out.print("y "); 
}
然后将打印
y

创建类
序列的实例时,调用其构造函数,因此:

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

最后,调用
Sequence
对象的方法
go

void go() 
{ 
   System.out.print("g ");
} 
将打印
g


由于所有这些,结果是:
xycg

非常感谢。这就澄清了问题。