【问题标题】:Is this a static method? "static {...}" [duplicate]这是静态方法吗? “静态{...}” [重复]
【发布时间】:2015-08-06 01:05:10
【问题描述】:

我正在练习 Head First Java。它有以下代码:

static {
System.out.println("Super constructor block");
}

我没有得到花括号之前的静态修饰符。这叫什么?我知道静态变量等。我尝试在线搜索但无法得到答案。谢谢。

【问题讨论】:

  • 这是一个静态块

标签: java


【解决方案1】:

它被称为静态初始化块。见https://docs.oracle.com/javase/tutorial/java/javaOO/initial.html

静态初始化块是用大括号括起来的普通代码块,{},前面是 static 关键字。

一旦类被 JVM 加载,它就会执行。

【讨论】:

    【解决方案2】:

    这称为“静态块”。它只执行一次:第一次创建该类的对象或第一次访问该类的静态成员(即使您从未创建该类的对象)。 See this link

    【讨论】:

      【解决方案3】:

      这是 static 块而不是 static 方法。

      • static 块不同于 static 方法。

      • static 块不需要被调用并自动执行。 static 块确保它们只被调用一次,当类被加载时。

      • static 块可以写入类中的任何位置,在执行之前编译器将合并所有 static 块并在类加载时立即执行。

      • 您只能在 static 块中初始化/访问静态变量/方法。这意味着您无法访问 static 块内的 non-static 变量,与 static 方法相同。

      • 与块不同,静态方法可以多次调用,这使得方法可重用,这是块的缺点。

      • 静态块通常用于初始化静态变量或在创建类实例或访问任何静态字段之前进行所需的其他计算..

      有关更多信息,请参阅以下链接:

      JavaCode.in

      Oracle Docs

      【讨论】:

      • 欢迎您.. 不赞成 :(
      • 静态变量可以在静态块之外访问..
      • 检查你的第四点
      • 它只是说我们只能访问块中的静态变量...意味着非静态变量不能在块内访问!!!
      • 但是我已经添加了进一步的说明!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      • 2018-02-20
      • 2011-12-11
      相关资源
      最近更新 更多