首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Hello world工作正常,但却得到没有main的错误?

Hello world工作正常,但却得到没有main的错误?
EN

Stack Overflow用户
提问于 2013-07-06 05:04:08
回答 6查看 3.2K关注 0票数 17

我在Java中有以下简单的hello world:

class A {
    static {
        System.out.println("Hello world");
    }
}

它像预期的那样工作,但奇怪的是,它给出了一个错误,说main方法之后不存在。

$ javac A.java && java A
Hello world
Exception in thread "main" java.lang.NoSuchMethodError: main

为什么?我应该忽略它吗?我甚至尝试过创建一个名为"main“的方法,但它什么也改变不了。

class A {
    static {
        main();
    }
    public static void main() {
        System.out.println("Hello world");
    }
}

$ javac A.java && java A
Hello world
Exception in thread "main" java.lang.NoSuchMethodError: main
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2013-07-06 05:07:20

当您的类被加载时,static初始化器将被运行,然后JVM将尝试调用main方法。您可以通过在static初始化器中再添加一行来解决此问题:

public class HelloWorld {
    static {
        System.out.println("Look ma', no hands!");
        System.exit(0);
    }
}

这将在JVM尝试调用您的main方法之前停止它。

还要注意,这不会在Java7中执行。Java7在初始化类之前查找main方法。

票数 24
EN

Stack Overflow用户

发布于 2013-07-06 05:05:19

因为您的类是由类加载器加载的,所以会执行静态代码,然后它会搜索main方法并崩溃,因为它不存在。

封装在任何方法外部的静态块中的类中的代码将在第一次引用该静态类时执行。

它找不到你的main方法的原因是你错误地声明了它。Main看起来像这样:

public static void main(String[] args){}

习惯这一行吧。你会看到很多很多次。

String[]参数...参数是一个空格分隔的参数列表,用户可以通过shell传递给您的程序。所有程序都是通过main方法进入的。这是一个已经流传了一段时间的标准。

可以在类中使用静态块来启动您的程序,但它会导致混淆,并且是非常不合适的。使用main方法作为入口点是行业标准。

我不能给出为什么这是标准的原因,也不能给出一个更有说服力的理由来说明为什么要使用它,而不是从shell获得输入到您的程序中。我不建议从静态块开始你的程序。

票数 11
EN

Stack Overflow用户

发布于 2013-07-06 05:09:17

忘记static代码块,如下所示:

public static void main(String[] args) {
    System.out.println("Hello, world!");
}
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17496829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档