【问题标题】:What is the use of {} block in Java [duplicate]Java中{}块的用途是什么[重复]
【发布时间】:2013-08-09 02:28:29
【问题描述】:

你好朋友,在 Java 类中只有一个块有什么用

public class StaticExample {
  {
    System.out.println("I m here...");
  }
}

【问题讨论】:

  • 不知道为什么叫StaticExample
  • 除了instance initialiser,您可能正在寻找的神奇短语是双大括号初始化习语。是的,{{{ 很难用谷歌搜索。
  • @texasbruce:但这不是静态初始化程序的示例。这显然是一个非静态初始化器。

标签: java


【解决方案1】:

这是一个初始化块。它在创建新实例时执行。如果您认为这是构造函数的工作,那么无论使用哪个构造函数,您都可以在其中放置执行的代码。它们按照它们出现的顺序在构造函数之前执行。如果你把static放在一个初始化块前面,它就变成了一个静态初始化块,类一加载就执行。

【讨论】:

  • 从技术上讲,它们是在超级构造函数调用之后和主体的其余部分之前执行的。如果超类 ctor 调用虚方法,这实际上很重要。
【解决方案2】:

它被称为初始化块,每次创建类的实例时都会调用它。

Java 编译器将初始化程序块复制到每个构造函数中。因此,这种方法可用于在多个构造函数之间共享代码块。

代码在构造函数中的代码之前调用,不依赖于后者。

public class InitializerExample {

    public InitializerExample() {
        System.out.println("InitializerExample");
    }

    {
        System.out.println("I'm here...");
    }

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

会产生

I'm here...
InitializerExample

在官方教程here中有记载

【讨论】:

  • 这些是不是一开始就复制到构造函数中了?结束?未定义的行为?
  • 代码在构造函数之前插入
  • 初始化块在构造函数体之前执行。 stackoverflow.com/questions/10689224/…
  • super() 先是 {} 然后是你的构造函数块代码
猜你喜欢
  • 2011-02-22
  • 1970-01-01
  • 2011-01-30
  • 2016-10-29
  • 2012-05-06
  • 2014-08-28
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多