我找不到合适的原因。
public class MainTest {
static public void main(String[] args) {
System.out.println("HAI");
}
}
当我运行这段代码时,输出是:HAI
static class MainTest {
static void main(String[] args) {
System.out.println("HAI");
}
}
这段代码编译得很好。但是当我运行时,我得到异常Main method not public
public class MainTest {
public void main(String[] args) {
System.out.println("HAI");
}
}
这段代码编译得很好。但是当我运行时,我得到Exception
Exception in thread "main" java.lang.NoSuchMethodError: main
有人能解释一下这种行为的原因吗?
如果我没有指定static,为什么它不作为实例方法。当我不使用类外为什么我需要使主方法作为公共?如果因为静态主方法正在调用,我可以在任何静态方法中放置主方法逻辑而不使用主方法吗?
关键字public
表示包含该方法的类之外的任何类都可以调用该方法。main就是这种情况,JVM的一些模糊对象需要调用这个类中的main方法。
关键字static
表示该方法不需要它所在的类的任何特定属性。由于每个java程序开始时除了JVM中固有的对象之外没有创建任何对象,因此java开发人员决定将main设置为静态。
简而言之,永远不应该出现main必须是类的实例方法的情况,因为必须首先创建这个类,并且在实际调用main函数之前没有办法告诉JVM。
public static void main(String args[])
您应该始终包含3个关键字:public, static和void
如果一个方法没有任何说明符(如您的第二个示例),那么它只能由同一包(同一文件夹)中的其他java文件访问。当JVM试图运行您的代码时,这会导致问题,因为它不是该包的一部分。
要理解第三点,必须理解实例方法是如何工作的。它们只能在实例上调用——因此JVM必须在调用main
之前使用构造函数实例化您的类。Java的设计者认为要求main
是静态的会更简单,所以如果它不是静态的就会导致错误。