java - Java 中未命名代码块的用途是什么?

标签 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

最佳答案

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

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

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

What is an initialization block?

还可以通过一些不错的代码示例来帮助解释该案例。

关于java - Java 中未命名代码块的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23309282/

相关文章:

mysql - 在迁移中复制带有更改数据的 rails 表

ruby-on-rails - 使用Minitest,需要 'minitest_helper'加载错误

ruby - 时间 :Class after requiring active_support/time_with_zone 的未定义方法 `zone`

java - 如何将此源代码转换为 lambda?

java - Ant javac : package x does not exist, 但我将 x.jar 添加到 java 构建路径库

Java字符串用正则表达式分割,忽略括号中的内容

mysql - 在查询随机简单查询期间丢失与 MySQL 服务器的连接

java - 如何为此类编写junit测试用例

java - 更新 json 数组文件中的值

ruby-on-rails - ruby/ruby on rails 内存泄漏检测