“{}”中的主类块从不执行

发布于 2024-08-03 03:09:50 字数 339 浏览 1 评论 0原文

考虑以下代码:-

class Name {

    {System.out.println("hi");}

    public static void main(String[] args) {
        System.out.println(waffle());
    }

    static boolean waffle() {
        try {
            return true;
        } finally {
            return false;
        }
    }
}

这永远不会输出“hi”。这是为什么呢?

Consider the following code:-

class Name {

    {System.out.println("hi");}

    public static void main(String[] args) {
        System.out.println(waffle());
    }

    static boolean waffle() {
        try {
            return true;
        } finally {
            return false;
        }
    }
}

This never outputs "hi" . Why is this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

恋竹姑娘 2024-08-10 03:09:50

大括号中的代码是 实例初始值设定项

来自 Java 语言规范,第三版,< a href="http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.6" rel="nofollow noreferrer">第 8.6 节:

在 a 中声明的实例初始值设定项
类的实例被执行时
该类已创建(§15.9),如下所示
§8.8.5.1 中指定。

如果执行Name类,Java虚拟机会调用public static void main(String[])方法,但是Name类不是未实例化的,因此实例初始化程序中的代码永远不会被执行。

还有一个 静态初始化程序,外观与实例初始值设定项类似,但前面有 static 关键字:

static {
    // Executed when a class is first accessed.
}

同样,来自 Java 语言规范,第三版第 8.7 节

在 a 中声明的任何静态初始值设定项
类在类被执行时被执行
初始化并与任何
类的字段初始值设定项 (§8.3.2)
变量,可用于初始化
类的类变量
(第 12.4 条)。

初始化字段页面来自 Java 教程 还包含有关静态和实例初始值设定项块的信息。

The code in the braces is the instance initializer.

From The Java Language Specification, Third Edition, Section 8.6:

An instance initializer declared in a
class is executed when an instance of
the class is created (§15.9), as
specified in §8.8.5.1.

If the Name class is executed, the public static void main(String[]) method is called by the Java virtual machine, but the Name class is not is not instantiated, so the code in the instance initializer will never be executed.

There is also a static initializer, which is similar in appearance to the instance initializer, but it has the static keyword in front:

static {
    // Executed when a class is first accessed.
}

Again, from The Java Language Specification, Third Edition, Section 8.7:

Any static initializers declared in a
class are executed when the class is
initialized and, together with any
field initializers (§8.3.2) for class
variables, may be used to initialize
the class variables of the class
(§12.4).

The Initializing Fields page from The Java Tutorials also has information about the static and instance initializer blocks.

七婞 2024-08-10 03:09:50

我认为它仅在实例创建时激活。尝试将其作为 static { ... } 运行

I think it is activated only on instance creation. Try running it as static { ... }

北陌 2024-08-10 03:09:50

该块应该声明为 static 才能运行,即 static{System.out.println("hi");}

The block should be declared static to get it to run, i.e. static{System.out.println("hi");}

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文