我偶然发现了这段似乎违反语法规则的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行,我不确定这个块试图做什么。它看起来像是一个类声明。在这种情况下,static关键字后面不应该跟一个类名吗?
有没有人能澄清我的疑虑?谢谢。
发布于 2013-05-31 09:08:54
第8行中的代码称为静态初始化块。其中,第3行中的代码称为非静态初始化块。
静态初始化块首先被执行。如果有多个静态初始化块,它们将按出现的顺序执行。非静态初始化程序块(或简单的初始化程序块)的内容被复制到每个构造函数的内容中。
https://stackoverflow.com/questions/16848267
复制相似问题