Java 松散的代码块

Java 松散的代码块,java,Java,当我试着运行这段代码时,它会打印“xycg”。我知道x的优先级高于y,因为它是静态的,构造函数(c)在方法(g)之前打印,但是在它们自己的块中放置两行的目的是什么,这有助于实现什么 public class Sequence { Sequence() { System.out.print("c "); } { System.out.print("y ");} public static void main(String[] args) { new Seq

当我试着运行这段代码时,它会打印“xycg”。我知道x的优先级高于y,因为它是静态的,构造函数(c)在方法(g)之前打印,但是在它们自己的块中放置两行的目的是什么,这有助于实现什么

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 "); }

}

您的问题与此密切相关,但并非完全重复:

当您第一次引用一个类时,它将被加载,静态组件将在静态初始值设定项中初始化。这些块对于设置集合或加载本机代码非常有用


实例初始值设定项是一段与静态初始值设定项类似的代码,只是它在调用构造函数之前对每个实例进行操作。在Java中似乎没有绝对的必要,因为它可以放在构造函数的开头。

静态的
和实例初始值设定项块就是它们的名称。如果使用适当的缩进更容易阅读,如果您知道初始值设定项的顺序,我不知道问题出在哪里。我的英语不太好,我不能理解这一点
,但在自己的块中放两行的目的到底是什么,这有什么帮助?
仅仅因为你可以用一种特定的语言做某事并不意味着你应该这样做。在本例中,我可以想象您可以使用这些代码块实现一些奇特的设计模式,如作用域逻辑,并且如您所指出的,执行顺序将是不寻常的。再一次:我会避免这样的构造。(如果我错了,请纠正我。)我看到的一个优点是,当您使用匿名类时,您没有构造函数,所以如果您想在构造函数中执行某些操作,您必须使用实例初始值设定项块。