我无法找到正确的理由。
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 in thread "main" java.lang.NoSuchMethodError: main
有人可以解释这种行为的原因。
如果我没有指定静态,为什么它不采用实例方法。 当我不在课外使用为什么我需要将主方法公之于众? 如果因为静态main方法调用我可以将main方法逻辑放在任何静态方法中而不使用main方法吗?
答案 0 :(得分:2)
关键字public
表示包含该方法的类外的任何类都可以调用此方法。这是main的情况,其中JVM的一些模糊对象需要在此类中调用main方法。
关键字static
表示该方法不需要它所在类的任何特定属性。由于每个java程序都没有创建除JVM中固有的对象之外的任何对象,因此它由Java决定开发人员制作主静态。
简而言之,永远不应该出现main需要成为类的实例方法的情况,因为必须首先创建该类,并且在实际调用之前无法将其告知JVM主要功能。
答案 1 :(得分:1)
public static void main(String args [])
您应该始终包含3个关键字:public,static和void
答案 2 :(得分:1)
如果方法没有任何说明符(如第二个示例中所示),则只能由同一个包(同一文件夹)中的其他java文件访问。当JVM尝试运行您的代码时,这会导致问题,因为它不是该软件包的一部分。
要理解您的第三点,您必须了解实例方法的工作原理。它们只能在实例上调用 - 因此JVM必须在调用main
之前使用构造函数实例化您的类。 Java的设计者认为要求main
是静态的更简单,因此如果它不是静态的,则会导致错误。