Java 使用命令提示符和BlueJ编译时的不同结果

Java 使用命令提示符和BlueJ编译时的不同结果,java,command-line,bluej,Java,Command Line,Bluej,我刚刚开始使用Java。。。再一次。 我只是做了一个简单的程序 class first { public static void main() { System.out.println("Hello!"); } } 这在BlueJ中运行得非常好,但在运行时从命令提示符运行时会出现错误 这就是错误所在 线程“main”java.lang.NoSuchMethodError:main中出现异常 这是因为我没有在main参数列表中给出String args[]

我刚刚开始使用Java。。。再一次。 我只是做了一个简单的程序

class first
{
    public static void main()
    {
        System.out.println("Hello!");
    }
}
这在BlueJ中运行得非常好,但在运行时从命令提示符运行时会出现错误

这就是错误所在 线程“main”java.lang.NoSuchMethodError:main中出现异常

这是因为我没有在
main
参数列表中给出
String args[]

到现在为止,我总是下意识地给它。我知道字符串数组在运行时包含所有参数值,但为什么它在BlueJ中运行


(BlueJ是一个学生友好的Java编辑器和编译器)

您的程序是有效的,无论您是从BlueJ还是从命令行编译,都将编译成相同的东西

但是,blueJ将允许您在类中运行任何静态方法(以便您可以测试您的函数),其中作为命令行
java
命令将(仅)查找要运行的特殊
main
方法。此主方法标记包含所有命令行参数的字符串数组,即使不使用这些命令行参数,程序也应如下所示:

class first
{
    public static void main(String[] args)
    {
        System.out.println("Hello!");
    }
}

请避免添加诸如“提前感谢…”之类的噪音,并注意Java是一个专有名称,而不是缩写或首字母缩写(拼写为Java)。也许您的BlueJ IDE正在使用另一个版本的Java?哦!我忘记给出显示的错误。这里是线程“main”java.lang.NoSuchMethodError:main@Marcelo Hernández Rishmawy No.BlueJ中的异常。我可以选择使用哪个版本的java(如果一台PC有多个版本)。BlueJ本身没有JDK。我只有一个版本的Java。我发现“提前感谢”是对stackoverflow查询的礼貌结尾。如果我错了,请纠正我,但它们在后端的工作方式不一样吗?我想当我点击编译按钮时,它会被转换成DOS命令…不,这是不正确的。从技术上讲,BlueJ编译类(就像使用命令行
java
compiler时一样),但随后BlueJ加载类并使用反射调用您选择的任何方法。它不会使用命令行
java
命令。这可能是一个蹩脚的问题,但为什么要偏离实际的java机制呢?它只允许您运行任何方法,以便您可以使用它进行实验。在Java中,main方法实际上没有什么特别之处,它恰好是命令行工具将尝试调用的方法。