双构造函数代码块,Java中的静态代码块

时间:2013-05-31 01:02:37

标签: java class static constructor double

我偶然发现了这个似乎违反语法规则的java代码块:

1. public class Sequence { 
2.     Sequence() { System.out.print("c "); } 
3.     { System.out.print("y "); } 
4.     public static void main(String[] args) { 
5.         new Sequence().go(); 
6.     } 
7.     void go() { System.out.print("g "); } 
8.     static { System.out.print("x "); } 
9. }

参考第3行,如何打开一个独立的代码块? 我测试了它,它工作。但是,逻辑反向流动:y将在c之前打印。

另外,参考第8行,我不确定这个块正在尝试做什么。这似乎是一个类声明。在这种情况下,静态关键字不应该跟一个类名吗?

有人可以澄清一下我的怀疑吗?谢谢。

1 个答案:

答案 0 :(得分:2)

第8行中的代码称为静态初始化块。其中第3行中的代码称为非静态初始化块。

首先执行静态初始化块。如果有多个静态初始化块,则按外观顺序执行。非静态初始化程序块(或简单的初始化程序块)的内容被复制到每个构造函数的内容中。