我在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
发布于 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
方法。
发布于 2013-07-06 05:05:19
因为您的类是由类加载器加载的,所以会执行静态代码,然后它会搜索main方法并崩溃,因为它不存在。
封装在任何方法外部的静态块中的类中的代码将在第一次引用该静态类时执行。
它找不到你的main方法的原因是你错误地声明了它。Main看起来像这样:
public static void main(String[] args){}
习惯这一行吧。你会看到很多很多次。
String[]参数...参数是一个空格分隔的参数列表,用户可以通过shell传递给您的程序。所有程序都是通过main方法进入的。这是一个已经流传了一段时间的标准。
可以在类中使用静态块来启动您的程序,但它会导致混淆,并且是非常不合适的。使用main方法作为入口点是行业标准。
我不能给出为什么这是标准的原因,也不能给出一个更有说服力的理由来说明为什么要使用它,而不是从shell获得输入到您的程序中。我不建议从静态块开始你的程序。
发布于 2013-07-06 05:09:17
忘记static
代码块,如下所示:
public static void main(String[] args) {
System.out.println("Hello, world!");
}
https://stackoverflow.com/questions/17496829
复制相似问题