【发布时间】: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