【问题标题】:why are Static blocks not being executed in the NetBeans IDE (Java)?为什么 NetBeans IDE (Java) 中没有执行静态块?
【发布时间】:2021-09-18 00:58:27
【问题描述】:

我正在学习 Java,现在正在测试静态块的工作原理。我正在尝试构建并运行以下代码,但未执行静态块。当我通过命令行编译和运行相同的代码时(我正在使用命令提示符(Windows 10)),正在执行静态块。
我假设这与 IDE 中的某些选项有关,但正如我所说,我仍在学习 Java 和 OOP。

package statictest;

public class StaticTest {
    public static void main(String args[]) {
        System.out.println(Test.i);
    }
}

class Test {
    static int i;
    static {
        i = 10;
    }
}

谁能帮帮我?也非常感谢解释为什么会发生这种情况。
PS:
使用 NetBeans 时,输出为 0
使用命令行时,输出为 10

【问题讨论】:

  • 根据我对the language specification 的阅读,NetBeans 做错了。我不明白为什么会有一个“选项”来不正确地实现语言,所以也许这是一个纯粹而简单的错误。
  • netbeans 在后台使用javac。 netbeans 中肯定没有--do-something-bizarre-and-break-spec 选项。这里的 lang 规范中没有允许;这必须打印10。检查几件事:例如,您是否在运行文件之前保存了文件?
  • 我使用 Java 16.0.2 在 Netbeans 12.4 中运行代码,它的工作方式与您的命令行输出一样。由于 Netbeans 依赖于已安装的 Java 版本(而不是某些 IDE 使用的内部版本),我个人并不认为它是 Netbeans 本身的错误,但我无法回答为什么会这样的问题, 否则你可能运行了错误的代码或运行了过期版本的代码(即清理并构建)
  • 您是如何创建 NetBeans 项目的?它是使用“Java with Maven”创建的吗?还是“Java 与 Ant”?如果我创建每种类型中的一种,“with Maven”项目会给出10,但“with Ant”项目会给出0 - 是的,这是在两个项目中都进行了清理和构建之后。有趣的是,Ant 项目的 JAR 文件在命令行执行时会给出10。 (我无法解释这些差异。)
  • @andrewjames 我正在运行一个带有 Ant 项目的 Java,也许这就是问题所在。我很肯定它不是旧版本的代码。 thnx 的快速回复。有人能解释一下 Ant 项目和 Maven 项目的区别吗?

标签: java netbeans static static-block


【解决方案1】:

从netbeans 12.0更新到12.4后我也遇到了这个问题,导入我的旧插件解决了这个问题,我认为它与nb-javac插件有关。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

您应该 upgrade 使用 NetBeans 12.5。

这是 NetBeans 12.4 中的一个已知问题,已在 NetBeans 12.5 中得到修复(我运行了一个测试来确认)。

来自NetBeans 12.5 Features 页面的摘要:

NETBEANS-5832 为 vanilla 索引修复静态初始化程序的编译。:https://github.com/apache/netbeans/pull/3054

具体的 NetBeans JIRA 票证:Static block not compiled

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 2018-08-25
    • 1970-01-01
    • 2020-01-27
    • 2014-06-05
    • 2012-08-29
    相关资源
    最近更新 更多