Java中未命名的代码块的目的是什么?

时间:2014-04-26 09:59:02

标签: java ruby

在我的Java类中,我在{}中有语句而没有任何与之关联的名称/引用,它似乎在构造函数运行之前执行。它的目的是什么?是否可以通过将变量/引用与其相关联来调用方法?如果没有,我可以更改它的触发顺序吗?

package com.core.java;

public class App {

    public static void main(String[] args) {
        new App();
    }

    static { System.out.print("static block, "); }      
    App() { System.out.print("constructor, "); }    
    { System.out.print("what_is_this? "); }

}

我在Ruby中看到了类似的构造,它可以与引用相关联并随意调用。例如

v = -> { puts "A Code Block" }
v.call #=> prints -> A Code Block

1 个答案:

答案 0 :(得分:1)

如果您想快速阅读这些结构及其用途,请参阅

http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

与Ruby的比较有些缺陷,因为这只是Java和Ruby之间的语法相似性 - 在Ruby中," {}"表示与Java使用此语法完全不同的东西。 " - > {}"在Ruby中是一个返回lambda的表达式,它是一个可调用的对象。

What is an initialization block?

还有一些很好的代码示例帮助解释这个案例。